diff --git a/pom.xml b/pom.xml
index d12ce13..5a9b531 100644
--- a/pom.xml
+++ b/pom.xml
@@ -107,6 +107,13 @@
org.springframework.boot
spring-boot-starter-webflux
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
diff --git a/src/main/java/com/satwik/splitora/SplitoraApplication.java b/src/main/java/com/satwik/splitora/SplitoraApplication.java
index 6cedd9d..842b409 100644
--- a/src/main/java/com/satwik/splitora/SplitoraApplication.java
+++ b/src/main/java/com/satwik/splitora/SplitoraApplication.java
@@ -2,8 +2,10 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@SpringBootApplication
+@EnableWebMvc
public class SplitoraApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/satwik/splitora/configuration/filter/SecurityFilter.java b/src/main/java/com/satwik/splitora/configuration/filter/SecurityFilter.java
index e982750..6a9562c 100644
--- a/src/main/java/com/satwik/splitora/configuration/filter/SecurityFilter.java
+++ b/src/main/java/com/satwik/splitora/configuration/filter/SecurityFilter.java
@@ -2,6 +2,7 @@
import com.satwik.splitora.configuration.jwt.JwtUtil;
import com.satwik.splitora.configuration.security.LoggedInUser;
+import com.satwik.splitora.constants.SecurityConstants;
import com.satwik.splitora.repository.UserRepository;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
@@ -18,22 +19,11 @@
import org.springframework.web.filter.OncePerRequestFilter;
import java.io.IOException;
-import java.util.*;
@Slf4j
@Component
public class SecurityFilter extends OncePerRequestFilter {
- private static final List WHITELISTED_URLS = new ArrayList<>(Arrays.asList(
- "/api/v1/auth/login",
- "/api/v1/auth/refresh_token",
- "/api/v1/user/register",
- "/api/v1/oauth2/login",
- "/api/v1/oauth2/callback",
- "/api/v1/auth/getUser"
-
- )); // Add your whitelisted URLs here
-
@Autowired
UserRepository userRepository;
@@ -47,7 +37,7 @@ public class SecurityFilter extends OncePerRequestFilter {
private LoggedInUser loggedInUser;
private boolean isWhitelisted(String url) {
- return WHITELISTED_URLS.stream().anyMatch(url::contains);
+ return SecurityConstants.WHITELISTED_URLS.stream().anyMatch(url::contains);
}
@Override
diff --git a/src/main/java/com/satwik/splitora/configuration/security/SecurityConfiguration.java b/src/main/java/com/satwik/splitora/configuration/security/SecurityConfiguration.java
index 02bd582..7ae5e2e 100644
--- a/src/main/java/com/satwik/splitora/configuration/security/SecurityConfiguration.java
+++ b/src/main/java/com/satwik/splitora/configuration/security/SecurityConfiguration.java
@@ -52,6 +52,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
.requestMatchers(HttpMethod.GET, "/api/v1/oauth2/callback**").permitAll()
.requestMatchers(HttpMethod.HEAD, "/api/v1/health/ping").permitAll()
.requestMatchers(HttpMethod.GET, "/api/v1/health/ping").permitAll()
+ .requestMatchers(HttpMethod.GET, "/v3/api-docs/**").permitAll()
+ .requestMatchers(HttpMethod.GET, "/swagger-ui/**").permitAll()
.anyRequest().authenticated()
).addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class);
diff --git a/src/main/java/com/satwik/splitora/configuration/tools/SwaggerConfiguration.java b/src/main/java/com/satwik/splitora/configuration/tools/SwaggerConfiguration.java
new file mode 100644
index 0000000..424d357
--- /dev/null
+++ b/src/main/java/com/satwik/splitora/configuration/tools/SwaggerConfiguration.java
@@ -0,0 +1,37 @@
+package com.satwik.splitora.configuration.tools;
+
+import com.satwik.splitora.constants.SecurityConstants;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.security.SecurityRequirement;
+import org.springdoc.core.customizers.OpenApiCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class SwaggerConfiguration {
+
+ @Bean
+ public OpenAPI customOpenAPI() {
+
+ return new OpenAPI()
+ .info(new io.swagger.v3.oas.models.info.Info()
+ .title("Splitora API")
+ .version("1.0")
+ .description("API documentation for Splitora application"));
+ }
+
+ @Bean
+ public OpenApiCustomizer openApiCustomizer() {
+
+ final String securitySchemeName = "bearerAuth";
+
+ return openApi ->
+ openApi.getPaths().forEach((s, pathItem) -> {
+ boolean isSecured = SecurityConstants.WHITELISTED_URLS.stream().noneMatch(s::contains);
+ if (isSecured) {
+ pathItem.readOperations().forEach(operation ->
+ operation.addSecurityItem(new SecurityRequirement().addList(securitySchemeName)));
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/satwik/splitora/constants/SecurityConstants.java b/src/main/java/com/satwik/splitora/constants/SecurityConstants.java
new file mode 100644
index 0000000..e001d78
--- /dev/null
+++ b/src/main/java/com/satwik/splitora/constants/SecurityConstants.java
@@ -0,0 +1,19 @@
+package com.satwik.splitora.constants;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class SecurityConstants {
+ public static final List WHITELISTED_URLS = new ArrayList<>(Arrays.asList(
+ "/api/v1/auth/login",
+ "/api/v1/auth/refresh_token",
+ "/api/v1/user/register",
+ "/api/v1/auth/getUser",
+ "/api/v1/oauth2/login",
+ "/api/v1/oauth2/callback",
+ "/api/v1/health/ping",
+ "/v3/api-docs/**",
+ "/swagger-ui/**"
+ ));
+}