diff --git a/btc-UI/src/app/constants/http-routs.ts b/btc-UI/src/app/constants/http-routs.ts
index faa7833..e516515 100755
--- a/btc-UI/src/app/constants/http-routs.ts
+++ b/btc-UI/src/app/constants/http-routs.ts
@@ -1,6 +1,6 @@
export class ApplicationHttpRouts {
private static readonly PROTOCOL: string = 'http';
- private static readonly BACKEND_SERVER: string = '192.168.0.100';
+ private static readonly BACKEND_SERVER: string = '10.131.90.167';
private static readonly FRONT_PORT_NUMBER: string = '4200';
private static readonly PORT_NUMBER: string = '8083';
private static readonly SOCKET: string = `${this.PROTOCOL}://${this.BACKEND_SERVER}:${this.PORT_NUMBER}`;
diff --git a/docker/.gitignore b/docker/.gitignore
new file mode 100644
index 0000000..b7be805
--- /dev/null
+++ b/docker/.gitignore
@@ -0,0 +1,2 @@
+# Ignore database data directory
+/db_data/
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index ec077ed..987f7aa 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -31,7 +31,7 @@ services:
spring:
#image: mathewfrancisv/spring_back_postgres:v1.0.0
- image: mathewfrancisv/btc_cezen_backend:v1.0.0
+ image: mathewfrancisv/btc_cezen_backend:v1.0.2
container_name: spring_app
ports:
- "8083:8080"
@@ -41,7 +41,7 @@ services:
SPRING_DATASOURCE_URL: jdbc:postgresql://postgres:5432/horse
SPRING_DATASOURCE_USERNAME: postgres # Ensure this matches POSTGRES_USER
SPRING_DATASOURCE_PASSWORD: root # Ensure this matches POSTGRES_PASSWORD
- SPRING_DATASOURCE_CORSIP: http://192.168.0.100:4200
+ SPRING_DATASOURCE_CORSIP: http://10.131.90.167:4200
#network_mode: host
networks:
- app_network
diff --git a/springHorse/pom.xml b/springHorse/pom.xml
index be8640a..5b79e9a 100755
--- a/springHorse/pom.xml
+++ b/springHorse/pom.xml
@@ -55,6 +55,12 @@
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java b/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java
index 36d8396..a86e877 100755
--- a/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java
+++ b/springHorse/src/main/java/com/example/cezenBTC/config/CezenRoutsSecurityChain.java
@@ -91,7 +91,7 @@ public class CezenRoutsSecurityChain {
//.csrf(AbstractHttpConfigurer::disable)
.csrf((csrf) ->
csrf.csrfTokenRequestHandler(requestHandler).
- ignoringRequestMatchers("/open/signup","/user/getXSRfToken","/user/ping")
+ ignoringRequestMatchers("/open/signup","/user/getXSRfToken","/user/ping","/websocket","/websocket/**")
//.csrfTokenRepository(new CookieCsrfTokenRepository())
.csrfTokenRepository(cookieCsrfTokenRepo)
)
@@ -111,11 +111,13 @@ public class CezenRoutsSecurityChain {
"/btc/get_race_card",
"/cezen/set_aors",
"/cezen/set_password",
- "/cezen/add_extension"
+ "/cezen/add_extension",
+ "/test/crash"
).hasAnyRole("admin")
//any one who is authenticated can access /logout
.requestMatchers("/user/getXSRfToken","/user/ping", "/logout").authenticated()
//all the rest are open to public
+ .requestMatchers("/websocket", "/websocket/**").permitAll()
.requestMatchers( "/open/login").permitAll()
)
// redirect to /login if the user is not authenticated Customizer.withDefaults() enables a security feature using the defaults provided by Spring Security
diff --git a/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java b/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java
new file mode 100644
index 0000000..98fd464
--- /dev/null
+++ b/springHorse/src/main/java/com/example/cezenBTC/config/CezenWebSocketConfig.java
@@ -0,0 +1,27 @@
+package com.example.cezenBTC.config;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.messaging.simp.config.MessageBrokerRegistry;
+import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
+import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
+import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
+
+// written by mathew francis
+// this class is the configuration for a web socket
+@Configuration
+@EnableWebSocketMessageBroker
+public class CezenWebSocketConfig implements WebSocketMessageBrokerConfigurer{
+
+ @Override
+ public void configureMessageBroker(MessageBrokerRegistry config) {
+ config.enableSimpleBroker("/topic"); // Enables a simple memory-based message broker to carry messages back to the client on destinations prefixed with /topic
+ config.setApplicationDestinationPrefixes("/app"); // Prefix for messages from client to backend
+ }
+
+ @Override
+ public void registerStompEndpoints(StompEndpointRegistry registry) {
+ registry.addEndpoint("/websocket").setAllowedOrigins("*"); // Native WebSocket
+
+ registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS(); // Registers "/websocket" endpoint and enables SockJS fallback
+ }
+
+}
diff --git a/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java b/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java
new file mode 100644
index 0000000..0f50846
--- /dev/null
+++ b/springHorse/src/main/java/com/example/cezenBTC/controller/TestApi.java
@@ -0,0 +1,23 @@
+package com.example.cezenBTC.controller;
+
+import com.example.cezenBTC.service.BtcWebSocketService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/test")
+public class TestApi {
+
+ @Autowired
+ BtcWebSocketService btcWebSocketService;
+
+ @GetMapping("/crash")
+ String breakConnection(){
+
+ btcWebSocketService.sendServerDownNotification();
+
+ return "Backend error";
+ }
+}
diff --git a/springHorse/src/main/java/com/example/cezenBTC/security/JWTTokenValidatorFilter.java b/springHorse/src/main/java/com/example/cezenBTC/security/JWTTokenValidatorFilter.java
index 186fcd7..9cd5eb1 100755
--- a/springHorse/src/main/java/com/example/cezenBTC/security/JWTTokenValidatorFilter.java
+++ b/springHorse/src/main/java/com/example/cezenBTC/security/JWTTokenValidatorFilter.java
@@ -79,8 +79,10 @@ public class JWTTokenValidatorFilter extends OncePerRequestFilter {
protected boolean shouldNotFilter(HttpServletRequest request) {
return request.getServletPath().equals("/open/signup")
- || request.getServletPath().equals("/open/login");
+ || request.getServletPath().equals("/open/login")
+ || request.getServletPath().equals("/websocket/**")
+ || request.getServletPath().equals("/websocket");
// //bellow was done to archive this /exposed/**
-// request.getServletPath().split("/")[1].equals("exposed");
+// request.getServletPath().split("/")[1].equals("exposed"); /websocket/**
}
}
diff --git a/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java b/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java
new file mode 100644
index 0000000..39a5ef5
--- /dev/null
+++ b/springHorse/src/main/java/com/example/cezenBTC/service/BtcWebSocketService.java
@@ -0,0 +1,17 @@
+package com.example.cezenBTC.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.simp.SimpMessagingTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BtcWebSocketService {
+
+ @Autowired
+ private SimpMessagingTemplate template;
+
+ public void sendServerDownNotification() {
+ template.convertAndSend("/topic/server-status", "DOWN");
+ }
+
+}