Преглед на файлове

Merge remote-tracking branch 'origin/merge_jetbrains'

# Conflicts:
#	pom.xml
#	src/main/java/com/vvvtimes/server/MainServer.java
#	src/main/java/com/vvvtimes/util/Base64.java
#	src/main/java/com/vvvtimes/util/Hex.java
#	src/main/java/com/vvvtimes/util/rsasign.java
backflow преди 8 години
родител
ревизия
d3177c7a8b
променени са 2 файла, в които са добавени 283 реда и са изтрити 248 реда
  1. 90 91
      pom.xml
  2. 193 157
      src/main/java/com/vvvtimes/server/MainServer.java

+ 90 - 91
pom.xml

@@ -2,100 +2,99 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>com.vvvtimes.com</groupId>
-  <artifactId>JrebelLicenseServerforJava</artifactId>
-  <version>1.0-SNAPSHOT</version>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <!-- 与Servlet版本对应 -->
-        <version>3.1</version>
-        <configuration>
-          <source>1.7</source>
-          <target>1.7</target>
-          <encoding>utf8</encoding>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>3.1.0</version>
-        <configuration>
-          <archive>
-            <manifest>
-              <mainClass>com.vvvtimes.server.MainServer</mainClass>
-            </manifest>
-          </archive>
-          <descriptorRefs>
-            <descriptorRef>jar-with-dependencies</descriptorRef>
-          </descriptorRefs>
-        </configuration>
-        <executions>
-          <execution>
-            <id>make-assembly</id>
-            <phase>package</phase>
-            <goals>
-              <goal>single</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-
-    </plugins>
-  </build>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.vvvtimes.com</groupId>
+    <artifactId>JrebelBrainsLicenseServerforJava</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>  
+         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <!-- 与Servlet版本对应 -->
+                <version>3.1</version>
+                <configuration>
+                    <source>1.6</source>
+                    <target>1.6</target>
+                    <encoding>utf8</encoding>
+                </configuration>
+            </plugin>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <version>3.1.0</version>
+            <configuration>
+              <archive>
+                <manifest>
+                  <mainClass>com.vvvtimes.server.MainServer</mainClass>
+                </manifest>
+              </archive>
+              <descriptorRefs>
+                <descriptorRef>jar-with-dependencies</descriptorRef>
+              </descriptorRefs>
+            </configuration>
+            <executions>
+              <execution>
+                <id>make-assembly</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+    </build>
 
   <dependencies>
 
-    <dependency>
-      <groupId>org.eclipse.jetty.aggregate</groupId>
-      <artifactId>jetty-all</artifactId>
-      <version>8.1.2.v20120308</version>
-    </dependency>
-
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>javax.servlet-api</artifactId>
-      <version>3.0.1</version>
-      <scope>provided</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>3.1</version>
-    </dependency>
-
-    <dependency>
-      <groupId>commons-codec</groupId>
-      <artifactId>commons-codec</artifactId>
-      <version>1.10</version>
-    </dependency>
-
-    <dependency>
-      <groupId>net.sf.json-lib</groupId>
-      <artifactId>json-lib</artifactId>
-      <version>2.4</version>
-      <classifier>jdk15</classifier>
-    </dependency>
-
-    <dependency>
-      <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15on</artifactId>
-      <version>1.58</version>
-    </dependency>
-
-  </dependencies>
+        <dependency>
+            <groupId>org.eclipse.jetty.aggregate</groupId>
+            <artifactId>jetty-all</artifactId>
+            <version>8.1.2.v20120308</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <version>1.58</version>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.10</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sf.json-lib</groupId>
+            <artifactId>json-lib</artifactId>
+            <version>2.4</version>
+            <classifier>jdk15</classifier>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.1</version>
+        </dependency>
+
+    </dependencies>
 
 
 </project>

+ 193 - 157
src/main/java/com/vvvtimes/server/MainServer.java

@@ -1,158 +1,194 @@
-package com.vvvtimes.server;
-
-import com.vvvtimes.JrebelUtil.JrebelSign;
-import net.sf.json.JSONObject;
-
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.AbstractHandler;
-
-public class MainServer extends AbstractHandler {
-
-
-    public static Map<String, String> parseArguments(String[] args) {
-        Map<String, String> params = new HashMap<>();
-
-        String option = null;
-        for (final String arg : args) {
-            if (arg.charAt(0) == '-') {
-                if (arg.length() < 2) {
-                    throw new IllegalArgumentException("Error at argument " + arg);
-                }
-                option = arg.substring(1);
-            } else {
-                params.put(option, arg);
-            }
-        }
-        return params;
-    }
-
-    public static void main(String[] args) throws Exception {
-        Map<String, String> arguments = parseArguments(args);
-        String port = arguments.get("p");
-
-        if (port == null || !port.matches("\\d+")) {
-            port = "8081";
-        }
-
-        Server server = new Server(Integer.parseInt(port));
-        server.setHandler(new MainServer());
-        server.start();
-
-        System.out.println("License Server started at http://localhost:" + port);
-        System.out.println("Activation address was: http://localhost:" + port + "/{tokenname}, with any email.");
-
-        server.join();
-    }
-
-    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
-            throws IOException, ServletException {
-        System.out.println(target);
-        if (target.equals("/")) {
-            indexHandler(target, baseRequest, request, response);
-        } else if (target.equals("/jrebel/leases")) {
-            jrebelLeasesHandler(target, baseRequest, request, response);
-        } else if (target.equals("/jrebel/leases/1")) {
-            jrebelLeases1Handler(target, baseRequest, request, response);
-        } else if (target.equals("/agent/leases")) {
-            jrebelLeasesHandler(target, baseRequest, request, response);
-        } else if (target.equals("/agent/leases/1")) {
-            jrebelLeases1Handler(target, baseRequest, request, response);
-        } else {
-            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
-        }
-
-    }
-
-    private void jrebelLeases1Handler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
-        response.setContentType("application/json; charset=utf-8");
-        response.setStatus(HttpServletResponse.SC_OK);
-        baseRequest.setHandled(true);
-        String jsonStr = "{\n" +
-                "    \"serverVersion\": \"3.2.4\",\n" +
-                "    \"serverProtocolVersion\": \"1.1\",\n" +
-                "    \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
-                "    \"groupType\": \"managed\",\n" +
-                "    \"statusCode\": \"SUCCESS\",\n" +
-                "    \"msg\": null,\n" +
-                "    \"statusMessage\": null\n" +
-                "}\n";
-        JSONObject jsonObject = JSONObject.fromObject(jsonStr);
-        String body = jsonObject.toString();
-        response.getWriter().print(body);
-
-    }
-
-    private void jrebelLeasesHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
-        response.setContentType("application/json; charset=utf-8");
-        response.setStatus(HttpServletResponse.SC_OK);
-        String clientRandomness = request.getParameter("randomness");
-        String username = request.getParameter("username");
-        String guid = request.getParameter("guid");
-        System.out.println(((Request) request).getParameters());
-        boolean offline = Boolean.parseBoolean(request.getParameter("offline"));
-        String validFrom = "null";
-        String validUntil = "null";
-        if (offline) {
-            String clientTime = request.getParameter("clientTime");
-            String offlineDays = request.getParameter("offlineDays");
-            //long clinetTimeUntil = Long.parseLong(clientTime) + Long.parseLong(offlineDays)  * 24 * 60 * 60 * 1000;
-            long clinetTimeUntil = Long.parseLong(clientTime) + 180L * 24 * 60 * 60 * 1000;
-            validFrom = clientTime;
-            validUntil = String.valueOf(clinetTimeUntil);
-        }
-        baseRequest.setHandled(true);
-        String jsonStr = "{\n" +
-                "    \"serverVersion\": \"3.2.4\",\n" +
-                "    \"serverProtocolVersion\": \"1.1\",\n" +
-                "    \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
-                "    \"groupType\": \"managed\",\n" +
-                "    \"id\": 1,\n" +
-                "    \"licenseType\": 1,\n" +
-                "    \"evaluationLicense\": false,\n" +
-                "    \"signature\": \"OJE9wGg2xncSb+VgnYT+9HGCFaLOk28tneMFhCbpVMKoC/Iq4LuaDKPirBjG4o394/UjCDGgTBpIrzcXNPdVxVr8PnQzpy7ZSToGO8wv/KIWZT9/ba7bDbA8/RZ4B37YkCeXhjaixpmoyz/CIZMnei4q7oWR7DYUOlOcEWDQhiY=\",\n" +
-                "    \"serverRandomness\": \"H2ulzLlh7E0=\",\n" +
-                "    \"seatPoolType\": \"standalone\",\n" +
-                "    \"statusCode\": \"SUCCESS\",\n" +
-                "    \"offline\": " + String.valueOf(offline) + ",\n" +
-                "    \"validFrom\": " + validFrom + ",\n" +
-                "    \"validUntil\": " + validUntil + ",\n" +
-                "    \"company\": \"Administrator\",\n" +
-                "    \"orderId\": \"\",\n" +
-                "    \"zeroIds\": [\n" +
-                "        \n" +
-                "    ],\n" +
-                "    \"licenseValidFrom\": 1490544001000,\n" +
-                "    \"licenseValidUntil\": 1691839999000\n" +
-                "}";
-
-        JSONObject jsonObject = JSONObject.fromObject(jsonStr);
-        if (clientRandomness == null || username == null || guid == null) {
-            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
-        } else {
-            JrebelSign jrebelSign = new JrebelSign();
-            jrebelSign.toLeaseCreateJson(clientRandomness, guid, offline, validFrom, validUntil);
-            String signature = jrebelSign.getSignature();
-            jsonObject.put("signature", signature);
-            jsonObject.put("company", username);
-            String body = jsonObject.toString();
-            response.getWriter().print(body);
-        }
-    }
-
-    private void indexHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
-        response.setContentType("text/html; charset=utf-8");
-        response.setStatus(HttpServletResponse.SC_OK);
-        baseRequest.setHandled(true);
-        response.getWriter().println("<h1>Hello,This is a Jrebel License Server!</h1>");
-
-    }
+package com.vvvtimes.server;
+
+import com.vvvtimes.JrebelUtil.JrebelSign;
+import com.vvvtimes.util.rsasign;
+import net.sf.json.JSONObject;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+
+public class MainServer extends AbstractHandler {
+
+    public static void main(String[] args) throws Exception {
+        Server server = new Server(8081);
+        server.setHandler(new MainServer());
+        server.start();
+        server.join();
+    }
+
+    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
+            throws IOException, ServletException {
+        System.out.println(target);
+        if (target.equals("/")) {
+            indexHandler(target, baseRequest, request, response);
+        } else if (target.equals("/jrebel/leases")) {
+            jrebelLeasesHandler(target, baseRequest, request, response);
+        } else if (target.equals("/jrebel/leases/1")) {
+            jrebelLeases1Handler(target, baseRequest, request, response);
+        } else if (target.equals("/agent/leases")) {
+            jrebelLeasesHandler(target, baseRequest, request, response);
+        } else if (target.equals("/agent/leases/1")) {
+            jrebelLeases1Handler(target, baseRequest, request, response);
+        } else if (target.equals("/rpc/ping.action")) {
+            pingHandler(target, baseRequest, request, response);
+        } else if (target.equals("/rpc/obtainTicket.action")) {
+            obtainTicketHandler(target, baseRequest, request, response);
+        } else if (target.equals("/rpc/releaseTicket.action")) {
+            releaseTicketHandler(target, baseRequest, request, response);
+        } else {
+            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+        }
+
+    }
+
+    private void jrebelLeases1Handler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        response.setContentType("application/json; charset=utf-8");
+        response.setStatus(HttpServletResponse.SC_OK);
+        baseRequest.setHandled(true);
+        String jsonStr = "{\n" +
+                "    \"serverVersion\": \"3.2.4\",\n" +
+                "    \"serverProtocolVersion\": \"1.1\",\n" +
+                "    \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
+                "    \"groupType\": \"managed\",\n" +
+                "    \"statusCode\": \"SUCCESS\",\n" +
+                "    \"msg\": null,\n" +
+                "    \"statusMessage\": null\n" +
+                "}\n";
+        JSONObject jsonObject = JSONObject.fromObject(jsonStr);
+        String body = jsonObject.toString();
+        response.getWriter().print(body);
+
+    }
+
+    private void jrebelLeasesHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        response.setContentType("application/json; charset=utf-8");
+        response.setStatus(HttpServletResponse.SC_OK);
+        String clientRandomness = request.getParameter("randomness");
+        String username = request.getParameter("username");
+        String guid = request.getParameter("guid");
+        System.out.println(((Request) request).getParameters());
+        boolean offline = Boolean.parseBoolean(request.getParameter("offline"));
+        String validFrom = "null";
+        String validUntil = "null";
+        if (offline) {
+            String clientTime = request.getParameter("clientTime");
+            String offlineDays = request.getParameter("offlineDays");
+            //long clinetTimeUntil = Long.parseLong(clientTime) + Long.parseLong(offlineDays)  * 24 * 60 * 60 * 1000;
+            long clinetTimeUntil = Long.parseLong(clientTime) + 180L * 24 * 60 * 60 * 1000;
+            validFrom = clientTime;
+            validUntil = String.valueOf(clinetTimeUntil);
+        }
+        baseRequest.setHandled(true);
+        String jsonStr = "{\n" +
+                "    \"serverVersion\": \"3.2.4\",\n" +
+                "    \"serverProtocolVersion\": \"1.1\",\n" +
+                "    \"serverGuid\": \"a1b4aea8-b031-4302-b602-670a990272cb\",\n" +
+                "    \"groupType\": \"managed\",\n" +
+                "    \"id\": 1,\n" +
+                "    \"licenseType\": 1,\n" +
+                "    \"evaluationLicense\": false,\n" +
+                "    \"signature\": \"OJE9wGg2xncSb+VgnYT+9HGCFaLOk28tneMFhCbpVMKoC/Iq4LuaDKPirBjG4o394/UjCDGgTBpIrzcXNPdVxVr8PnQzpy7ZSToGO8wv/KIWZT9/ba7bDbA8/RZ4B37YkCeXhjaixpmoyz/CIZMnei4q7oWR7DYUOlOcEWDQhiY=\",\n" +
+                "    \"serverRandomness\": \"H2ulzLlh7E0=\",\n" +
+                "    \"seatPoolType\": \"standalone\",\n" +
+                "    \"statusCode\": \"SUCCESS\",\n" +
+                "    \"offline\": " + String.valueOf(offline) + ",\n" +
+                "    \"validFrom\": " + validFrom + ",\n" +
+                "    \"validUntil\": " + validUntil + ",\n" +
+                "    \"company\": \"Administrator\",\n" +
+                "    \"orderId\": \"\",\n" +
+                "    \"zeroIds\": [\n" +
+                "        \n" +
+                "    ],\n" +
+                "    \"licenseValidFrom\": 1490544001000,\n" +
+                "    \"licenseValidUntil\": 1691839999000\n" +
+                "}";
+
+        JSONObject jsonObject = JSONObject.fromObject(jsonStr);
+        if (clientRandomness == null || username == null || guid == null) {
+            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+        } else {
+            JrebelSign jrebelSign = new JrebelSign();
+            jrebelSign.toLeaseCreateJson(clientRandomness, guid, offline, validFrom, validUntil);
+            String signature = jrebelSign.getSignature();
+            jsonObject.put("signature", signature);
+            jsonObject.put("company", username);
+            String body = jsonObject.toString();
+            response.getWriter().print(body);
+        }
+    }
+
+    private void releaseTicketHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException{
+        response.setContentType("text/html; charset=utf-8");
+        response.setStatus(HttpServletResponse.SC_OK);
+        String salt = request.getParameter("salt");
+        baseRequest.setHandled(true);
+        if(salt==null){
+            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+        }else{
+            String xmlContent = "<ReleaseTicketResponse><message></message><responseCode>OK</responseCode><salt>" + salt + "</salt></ReleaseTicketResponse>";
+            String xmlSignature = rsasign.Sign(xmlContent);
+            String body = "<!-- " + xmlSignature + " -->\n" + xmlContent;
+            response.getWriter().print(body);
+        }
+    }
+
+    private void obtainTicketHandler ( String target , Request baseRequest , HttpServletRequest request ,
+                                       HttpServletResponse response ) throws IOException
+    {
+        response.setContentType("text/html; charset=utf-8");
+        response.setStatus(HttpServletResponse.SC_OK);
+        SimpleDateFormat fm=new SimpleDateFormat("EEE,d MMM yyyy hh:mm:ss Z", Locale.ENGLISH);
+        String date =fm.format(new Date())+" GMT";
+        //response.setHeader("Date", date);
+        //response.setHeader("Server", "fasthttp");
+        String salt = request.getParameter("salt");
+        String username = request.getParameter("userName");
+        String prolongationPeriod = "607875500";
+        baseRequest.setHandled(true);
+        if(salt==null||username==null){
+            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+        }else{
+            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>";
+            String xmlSignature = rsasign.Sign(xmlContent);
+            String body = "<!-- " + xmlSignature + " -->\n" + xmlContent;
+            response.getWriter().print(body);
+        }
+
+
+    }
+
+    private void pingHandler ( String target , Request baseRequest , HttpServletRequest request , HttpServletResponse response ) throws IOException
+    {
+        response.setContentType("text/html; charset=utf-8");
+        response.setStatus(HttpServletResponse.SC_OK);
+        String salt = request.getParameter("salt");
+        baseRequest.setHandled(true);
+        if(salt==null){
+            response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+        }else{
+            String xmlContent = "<PingResponse><message></message><responseCode>OK</responseCode><salt>" + salt + "</salt></PingResponse>";
+            String xmlSignature = rsasign.Sign(xmlContent);
+            String body = "<!-- " + xmlSignature + " -->\n" + xmlContent;
+            response.getWriter().print(body);
+        }
+
+    }
+
+    private void indexHandler(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
+        response.setContentType("text/html; charset=utf-8");
+        response.setStatus(HttpServletResponse.SC_OK);
+        baseRequest.setHandled(true);
+        response.getWriter().println("<h1>Hello,This is a Jrebel & JetBrains License Server!</h1>");
+
+    }
 }