From 707291e637adcd70781dbd8496f41356780a1027 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Wed, 11 Mar 2020 16:23:58 +0100 Subject: [PATCH] Unauthenticated socket works --- build.gradle | 2 + gradle.yml | 39 +++++++++++++++++++ .../smarthut/config/WebSecurityConfig.java | 1 + .../smarthut/socket/SensorSocketConfig.java | 15 +++++++ .../smarthut/socket/SensorSocketDecoder.java | 32 --------------- .../smarthut/socket/SensorSocketEncoder.java | 24 ------------ .../smarthut/socket/SensorSocketEndpoint.java | 37 ++++++++---------- test.html | 26 +++++++++++++ 8 files changed, 100 insertions(+), 76 deletions(-) create mode 100644 gradle.yml delete mode 100644 src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketDecoder.java delete mode 100644 src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEncoder.java create mode 100644 test.html diff --git a/build.gradle b/build.gradle index d23270b..5140ea7 100644 --- a/build.gradle +++ b/build.gradle @@ -23,6 +23,8 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-mail' + implementation 'org.springframework.boot:spring-boot-starter-websocket' + implementation 'org.springframework:spring-websocket:5.2.4.RELEASE' implementation 'io.jsonwebtoken:jjwt:0.9.1' implementation 'org.springframework.security:spring-security-web' implementation 'org.postgresql:postgresql' diff --git a/gradle.yml b/gradle.yml new file mode 100644 index 0000000..51fefa4 --- /dev/null +++ b/gradle.yml @@ -0,0 +1,39 @@ +# vim: set ts=2 sw=2 et tw=80: +image: gradle:jdk13 + +stages: + - build + - test + - deploy + +smarthut_build: + stage: build + script: + - gradle assemble + artifacts: + paths: + - build/libs/*.jar + expire_in: 1 week + +smarthut_test: + stage: test + script: + - gradle check + +smarthut_deploy: + stage: deploy + image: docker:latest + services: + - docker:dind + variables: + DOCKER_DRIVER: overlay + before_script: + - docker version + - docker info + - docker login -u smarthutsm -p $CI_DOCKER_PASS + script: + - "docker build -t smarthutsm/smarthut:${CI_COMMIT_BRANCH} --pull ." + - "docker push smarthutsm/smarthut:${CI_COMMIT_BRANCH}" + after_script: + - docker logout + diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/config/WebSecurityConfig.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/config/WebSecurityConfig.java index 253998d..ec116c3 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/config/WebSecurityConfig.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/config/WebSecurityConfig.java @@ -51,6 +51,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { // dont authenticate this particular request .authorizeRequests() .antMatchers( + "/sensor-socket", "/auth/login", "/swagger-ui.html", "/register", diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketConfig.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketConfig.java index 7d04538..4e032bf 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketConfig.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketConfig.java @@ -1,7 +1,12 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.socket; import javax.websocket.server.ServerEndpointConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; +import org.springframework.web.socket.server.standard.ServerEndpointRegistration; +@Configuration public class SensorSocketConfig extends ServerEndpointConfig.Configurator { public static SensorSocketEndpoint getInstance() { @@ -10,6 +15,16 @@ public class SensorSocketConfig extends ServerEndpointConfig.Configurator { private static SensorSocketEndpoint instance = new SensorSocketEndpoint(); + @Bean + public ServerEndpointRegistration sensorSocketEndpoint() { + return new ServerEndpointRegistration("/sensor-socket", instance); + } + + @Bean + public ServerEndpointExporter endpointExporter() { + return new ServerEndpointExporter(); + } + @Override public T getEndpointInstance(Class endpointClass) throws InstantiationException { try { diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketDecoder.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketDecoder.java deleted file mode 100644 index ad3a76e..0000000 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketDecoder.java +++ /dev/null @@ -1,32 +0,0 @@ -package ch.usi.inf.sa4.sanmarinoes.smarthut.socket; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gson.JsonSyntaxException; -import javax.websocket.*; - -public class SensorSocketDecoder implements Decoder.Text { - private Gson decoder; - - @Override - public void init(EndpointConfig endpointConfig) { - decoder = new Gson(); - } - - @Override - public void destroy() {} - - @Override - public JsonObject decode(String s) throws DecodeException { - try { - return decoder.fromJson(s, JsonObject.class); - } catch (JsonSyntaxException e) { - throw new DecodeException(s, "Cannot decode sensor message", e); - } - } - - @Override - public boolean willDecode(String s) { - return true; - } -} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEncoder.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEncoder.java deleted file mode 100644 index be04293..0000000 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEncoder.java +++ /dev/null @@ -1,24 +0,0 @@ -package ch.usi.inf.sa4.sanmarinoes.smarthut.socket; - -import com.google.gson.Gson; -import com.google.gson.JsonObject; -import javax.websocket.EncodeException; -import javax.websocket.Encoder; -import javax.websocket.EndpointConfig; - -public class SensorSocketEncoder implements Encoder.Text { - private Gson encoder; - - @Override - public String encode(JsonObject object) throws EncodeException { - return encoder.toJson(object); - } - - @Override - public void init(EndpointConfig endpointConfig) { - encoder = new Gson(); - } - - @Override - public void destroy() {} -} diff --git a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEndpoint.java b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEndpoint.java index 82ab767..36565c8 100644 --- a/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEndpoint.java +++ b/src/main/java/ch/usi/inf/sa4/sanmarinoes/smarthut/socket/SensorSocketEndpoint.java @@ -1,19 +1,14 @@ package ch.usi.inf.sa4.sanmarinoes.smarthut.socket; +import com.google.gson.Gson; import com.google.gson.JsonObject; import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; +import java.util.*; import javax.websocket.*; -import javax.websocket.server.ServerEndpoint; -@ServerEndpoint( - value = "/service", - configurator = SensorSocketConfig.class, - encoders = SensorSocketEncoder.class, - decoders = SensorSocketDecoder.class) -public class SensorSocketEndpoint { +public class SensorSocketEndpoint extends Endpoint { + + private Gson gson = new Gson(); private Set clients = Collections.synchronizedSet(new HashSet<>()); @@ -21,16 +16,6 @@ public class SensorSocketEndpoint { return clients; } - @OnOpen - public void onOpen(Session userSession) { - clients.add(userSession); - } - - @OnClose - public void onClose(Session userSession) { - clients.remove(userSession); - } - public int broadcast(JsonObject message) throws IOException, EncodeException { for (Session session : clients) { System.out.println(message); @@ -38,4 +23,16 @@ public class SensorSocketEndpoint { } return clients.size(); } + + @Override + public void onOpen(Session session, EndpointConfig config) { + final JsonObject test = new JsonObject(); + test.addProperty("ciao", "mamma"); + try { + session.getBasicRemote().sendText(gson.toJson(test)); + clients.add(session); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/test.html b/test.html new file mode 100644 index 0000000..42bb82d --- /dev/null +++ b/test.html @@ -0,0 +1,26 @@ + + + + + + + +