diff --git a/pom.xml b/pom.xml
index ef1ef89d..a4c754e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,19 +43,42 @@
3.3
- org.glassfish.jersey.core
- jersey-server
- 2.27
+ org.hsqldb
+ hsqldb
+ 2.4.0
+ jar
- org.glassfish.jersey.containers
- jersey-container-servlet
- 2.27
+ org.glassfish.jersey.core
+ jersey-server
+ 2.27
- org.eclipse.jetty
- jetty-maven-plugin
- 9.4.11.v20180605
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+
+
+ org.eclipse.jetty
+ jetty-server
+ 9.4.11.v20180605
+ config
+
+
+ org.glassfish.jersey.containers
+ jersey-container-servlet-core
+ 2.27
+
+
+ org.eclipse.jetty
+ jetty-servlet
+ 9.4.11.v20180605
+ jar
+
+
+ org.glassfish.jersey.inject
+ jersey-hk2
+ 2.27
\ No newline at end of file
diff --git a/src/Start.java b/src/Start.java
new file mode 100644
index 00000000..99632030
--- /dev/null
+++ b/src/Start.java
@@ -0,0 +1,20 @@
+
+import api.ApiService;
+import repository.DataException;
+import repository.RepositoryFactory;
+import repository.RepositoryManager;
+import repository.hsqldb.HSQLDBRepositoryFactory;
+
+
+public class Start {
+ private static final String connectionUrl = "jdbc:hsqldb:mem:db/test;create=true;close_result=true;sql.strict_exec=true;sql.enforce_names=true;sql.syntax_mys=true";
+
+ public static void main(String args[]) throws DataException
+ {
+ RepositoryFactory repositoryFactory = new HSQLDBRepositoryFactory(connectionUrl);
+ RepositoryManager.setRepositoryFactory(repositoryFactory);
+
+ ApiService apiService = new ApiService();
+ apiService.start();
+ }
+}
diff --git a/src/api/ApiService.java b/src/api/ApiService.java
index 509f6913..e523a7d6 100644
--- a/src/api/ApiService.java
+++ b/src/api/ApiService.java
@@ -1,5 +1,7 @@
package api;
+//import io.swagger.jaxrs.config.DefaultJaxrsConfig;
+
import java.util.HashSet;
import java.util.Set;
@@ -10,62 +12,71 @@ import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
+
import settings.Settings;
public class ApiService {
+ private Server server;
- public Server server;
-
- public ApiService()
- {
- //CREATE CONFIG
- Set> s = new HashSet>();
+ public ApiService()
+ {
+ // resources to register
+ Set> s = new HashSet>();
s.add(BlocksResource.class);
-
- ResourceConfig config = new ResourceConfig(s);
-
- //CREATE CONTAINER
- ServletContainer container = new ServletContainer(config);
-
- //CREATE CONTEXT
- ServletContextHandler context = new ServletContextHandler();
- context.setContextPath("/");
- context.addServlet(new ServletHolder(container),"/*");
+ ResourceConfig config = new ResourceConfig(s);
+
+ // create RPC server
+ this.server = new Server(Settings.getInstance().getRpcPort());
- //CREATE WHITELIST
+ // whitelist
InetAccessHandler accessHandler = new InetAccessHandler();
for(String pattern : Settings.getInstance().getRpcAllowed())
- accessHandler.include(pattern);
+ accessHandler.include(pattern);
+ this.server.setHandler(accessHandler);
+
+ // context
+ ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
+ context.setContextPath("/");
accessHandler.setHandler(context);
- //CREATE RPC SERVER
- this.server = new Server(Settings.getInstance().getRpcPort());
- this.server.setHandler(accessHandler);
- }
-
- public void start()
- {
- try
+ // API servlet
+ ServletContainer container = new ServletContainer(config);
+ ServletHolder apiServlet = new ServletHolder(container);
+ apiServlet.setInitOrder(1);
+ context.addServlet(apiServlet, "/api/*");
+
+ /*
+ // Setup Swagger servlet
+ ServletHolder swaggerServlet = context.addServlet(DefaultJaxrsConfig.class, "/swagger-core");
+ swaggerServlet.setInitOrder(2);
+ swaggerServlet.setInitParameter("api.version", "1.0.0");
+ */
+
+ }
+
+ public void start()
+ {
+ try
{
- //START RPC
- server.start();
- }
+ //START RPC
+ server.start();
+ }
catch (Exception e)
- {
- //FAILED TO START RPC
- }
- }
-
- public void stop()
- {
- try
{
- //STOP RPC
- server.stop();
- }
+ //FAILED TO START RPC
+ }
+ }
+
+ public void stop()
+ {
+ try
+ {
+ //STOP RPC
+ server.stop();
+ }
catch (Exception e)
- {
- //FAILED TO STOP RPC
- }
- }
+ {
+ //FAILED TO STOP RPC
+ }
+ }
}
diff --git a/src/api/BlocksResource.java b/src/api/BlocksResource.java
index 0b2f0427..d46744a2 100644
--- a/src/api/BlocksResource.java
+++ b/src/api/BlocksResource.java
@@ -1,9 +1,12 @@
package api;
+import javax.servlet.http.HttpServletRequest;
+
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import repository.DataException;
@@ -13,16 +16,18 @@ import repository.RepositoryManager;
@Path("blocks")
@Produces(MediaType.APPLICATION_JSON)
public class BlocksResource {
+ @Context
+ HttpServletRequest request;
- @GET
- @Path("/height")
- public static String getHeight()
- {
- try (final Repository repository = RepositoryManager.getRepository()) {
- return String.valueOf(repository.getBlockRepository().getBlockchainHeight());
- } catch (Exception e) {
- throw new WebApplicationException("What happened?");
- }
- }
+ @GET
+ @Path("/height")
+ public static String getHeight()
+ {
+ try (final Repository repository = RepositoryManager.getRepository()) {
+ return String.valueOf(repository.getBlockRepository().getBlockchainHeight());
+ } catch (Exception e) {
+ throw new WebApplicationException("What happened?");
+ }
+ }
}
diff --git a/src/settings/Settings.java b/src/settings/Settings.java
index 4600f867..288020b6 100644
--- a/src/settings/Settings.java
+++ b/src/settings/Settings.java
@@ -26,7 +26,7 @@ public class Settings {
//RPC
private int rpcPort = 9085;
- private List rpcAllowed = new ArrayList(Arrays.asList("127.0.0.1"));
+ private List rpcAllowed = new ArrayList(Arrays.asList("127.0.0.1", "::1")); // ipv4, ipv6
private boolean rpcEnabled = true;
// Constants