diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 6e7d5de..ec37419 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -24,4 +24,6 @@ logging.file.name=@env.SCHEDULER_API_LOGGING_FILE_NAME@ springdoc.api-docs.enabled=@env.SWAGGER_DOC_ENABLED@ springdoc.swagger-ui.enabled=@env.SWAGGER_DOC_ENABLED@ +cors.allowed-origins=@CORS_ALLOWED_ORIGINS@ + diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index 085cd72..387cd1e 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -15,4 +15,5 @@ common-url=/commonapi-v1.0/ ### Redis IP spring.redis.host=localhost jwt.secret= +cors.allowed-origins= diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index c6a0485..4be1f96 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -20,3 +20,4 @@ common-url=http://localhost:8083/ spring.redis.host=localhost jwt.secret= +cors.allowed-origins=http://localhost:8088 \ No newline at end of file diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index ad74007..95bbe05 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -16,3 +16,4 @@ common-url=/commonapi-v1.0/ ### Redis IP spring.redis.host=localhost jwt.secret= +cors.allowed-origins= \ No newline at end of file diff --git a/src/main/java/com/iemr/tm/config/CorsConfig.java b/src/main/java/com/iemr/tm/config/CorsConfig.java new file mode 100644 index 0000000..5b4a7a7 --- /dev/null +++ b/src/main/java/com/iemr/tm/config/CorsConfig.java @@ -0,0 +1,24 @@ +package com.iemr.tm.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class CorsConfig implements WebMvcConfigurer { + + @Value("${cors.allowed-origins}") + private String allowedOrigins; + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins(allowedOrigins) + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .allowedHeaders("*") + .exposedHeaders("Authorization", "Jwttoken") // Explicitly expose headers if needed + .allowCredentials(true) + .maxAge(3600); + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/tm/controller/schedule/SchedulingController.java b/src/main/java/com/iemr/tm/controller/schedule/SchedulingController.java index 3cb6812..54113b9 100644 --- a/src/main/java/com/iemr/tm/controller/schedule/SchedulingController.java +++ b/src/main/java/com/iemr/tm/controller/schedule/SchedulingController.java @@ -52,7 +52,7 @@ public class SchedulingController { @Autowired private SchedulingService schedulingService; - @CrossOrigin() + @Operation(summary = "Mark availability of specialist") @RequestMapping(value = "markavailability", method = RequestMethod.POST) public String markavailability(@RequestBody String specialistInput1) { @@ -72,7 +72,7 @@ public String markavailability(@RequestBody String specialistInput1) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Mark unavailability of specialist") @RequestMapping(value = "unmarkavailability", method = RequestMethod.POST) public String unmarkavailability(@RequestBody String specialistInput1) { @@ -91,7 +91,7 @@ public String unmarkavailability(@RequestBody String specialistInput1) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Get available slots of specialist for a particular day") @RequestMapping(value = "getavailableSlot", method = RequestMethod.POST) public String getavailableSlot(@RequestBody String specialistInput1) { @@ -109,7 +109,7 @@ public String getavailableSlot(@RequestBody String specialistInput1) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Get available slots of specialist for a particular month") @RequestMapping(value = { "/monthview/{year}", "/monthview/{year}/{month}", "/monthview/{year}/{month}/{day}" }, method = RequestMethod.POST) @@ -131,7 +131,7 @@ public String view(@RequestBody String specialistInput1, @PathVariable("year") I return response.toString(); } - @CrossOrigin() + @Operation(summary = "Book available slots of specialist of a particular day") @RequestMapping(value = "bookSlot", method = RequestMethod.POST) public String bookSlot(@RequestBody String specialistInput1) { @@ -149,7 +149,7 @@ public String bookSlot(@RequestBody String specialistInput1) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Cancel booked slots of specialist of a particular day") @RequestMapping(value = "cancelBookedSlot", method = RequestMethod.POST) public String cancelBookedSlot(@RequestBody String specialistInput1) { @@ -167,7 +167,7 @@ public String cancelBookedSlot(@RequestBody String specialistInput1) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Get day view of particular specialization") @RequestMapping(value = "getdayview", method = RequestMethod.POST) public String getdayview(@RequestBody String specialistInput1) { diff --git a/src/main/java/com/iemr/tm/controller/specialist/SpecialistController.java b/src/main/java/com/iemr/tm/controller/specialist/SpecialistController.java index c42e124..a1e51e5 100644 --- a/src/main/java/com/iemr/tm/controller/specialist/SpecialistController.java +++ b/src/main/java/com/iemr/tm/controller/specialist/SpecialistController.java @@ -50,7 +50,7 @@ public class SpecialistController { @Autowired private SpecialistService specialistService; - @CrossOrigin() + @Operation(summary = "Fetch master specialization") @RequestMapping(value = "masterspecialization", method = RequestMethod.POST) public String markavailability() { @@ -66,7 +66,7 @@ public String markavailability() { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Fetch list of specialists") @RequestMapping(value = "getSpecialist", method = RequestMethod.POST) public String getSpecialist(@RequestBody Specialist specialist) { @@ -83,7 +83,7 @@ public String getSpecialist(@RequestBody Specialist specialist) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Fetch user specialist") @RequestMapping(value = "info/{userID}", method = RequestMethod.GET) public String info(@PathVariable("userID") Long userID) { @@ -101,7 +101,7 @@ public String info(@PathVariable("userID") Long userID) { return response.toString(); } - @CrossOrigin() + @Operation(summary = "Fetch all specialists") @RequestMapping(value = "getSpecialistAll", method = RequestMethod.POST) public String getSpecialistAll(@RequestBody Specialist specialist) { diff --git a/src/main/java/com/iemr/tm/controller/van/VanController.java b/src/main/java/com/iemr/tm/controller/van/VanController.java index 876f593..c723b78 100644 --- a/src/main/java/com/iemr/tm/controller/van/VanController.java +++ b/src/main/java/com/iemr/tm/controller/van/VanController.java @@ -46,7 +46,7 @@ public class VanController { @Autowired private VanService vanService; - @CrossOrigin() + @Operation(summary = "Fetch specialization by van id") @RequestMapping(value = "getvan/{vanid}", method = RequestMethod.GET) public String markavailability(@PathVariable("vanid") Integer vanid) { diff --git a/src/main/java/com/iemr/tm/utils/DynamicCorsFilter.java b/src/main/java/com/iemr/tm/utils/DynamicCorsFilter.java new file mode 100644 index 0000000..f1e30bd --- /dev/null +++ b/src/main/java/com/iemr/tm/utils/DynamicCorsFilter.java @@ -0,0 +1,37 @@ +package com.iemr.common.utils; + +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.util.Arrays; + +@Component +public class DynamicCorsFilter extends OncePerRequestFilter { + + @Value("${cors.allowed-origins}") + private String[] allowedOrigins; + + @Override + protected void doFilterInternal(HttpServletRequest request, + HttpServletResponse response, + FilterChain filterChain) + throws ServletException, IOException { + + String origin = request.getHeader("Origin"); + if (origin != null && Arrays.asList(allowedOrigins).contains(origin)) { + response.setHeader("Access-Control-Allow-Origin", origin); + } + + if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { + response.setStatus(HttpServletResponse.SC_OK); + } else { + filterChain.doFilter(request, response); + } + } +}