Unauthenticated socket works
This commit is contained in:
parent
589ef8c3cc
commit
707291e637
8 changed files with 100 additions and 76 deletions
|
@ -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'
|
||||
|
|
39
gradle.yml
Normal file
39
gradle.yml
Normal file
|
@ -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
|
||||
|
|
@ -51,6 +51,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|||
// dont authenticate this particular request
|
||||
.authorizeRequests()
|
||||
.antMatchers(
|
||||
"/sensor-socket",
|
||||
"/auth/login",
|
||||
"/swagger-ui.html",
|
||||
"/register",
|
||||
|
|
|
@ -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> T getEndpointInstance(Class<T> endpointClass) throws InstantiationException {
|
||||
try {
|
||||
|
|
|
@ -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<JsonObject> {
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -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<JsonObject> {
|
||||
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() {}
|
||||
}
|
|
@ -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<Session> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
26
test.html
Normal file
26
test.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
let connection = new WebSocket("ws://localhost:8080/sensor-socket", ["access_token", "malusa"]);
|
||||
console.log("***CREATED WEBSOCKET");
|
||||
|
||||
connection.onopen = function(evt) {
|
||||
console.log("***ONOPEN", evt);
|
||||
connection.send({ciao: "mamma"});
|
||||
};
|
||||
|
||||
connection.onmessage = function(evt) {
|
||||
console.log("***ONMESSAGE", evt);
|
||||
};
|
||||
|
||||
connection.onerror = function(evt) {
|
||||
console.error("***ONERROR", evt);
|
||||
};
|
||||
|
||||
console.log("***CREATED all");
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue