diff --git a/pom.xml b/pom.xml
index 0ad1c1c..cd4c2e1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -71,6 +71,20 @@
org.springframework.boot
spring-boot-starter-data-mongodb
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+
+
+ jakarta.servlet
+ jakarta.servlet-api
+ 6.1.0
+ provided
+
+
diff --git a/src/main/java/io/titan/portfolio/config/SecurityConfig.java b/src/main/java/io/titan/portfolio/config/SecurityConfig.java
new file mode 100644
index 0000000..672519b
--- /dev/null
+++ b/src/main/java/io/titan/portfolio/config/SecurityConfig.java
@@ -0,0 +1,30 @@
+package io.titan.portfolio.config;
+
+import io.titan.portfolio.security.ApiKeyFilter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+public class SecurityConfig {
+
+ private final ApiKeyFilter apiKeyFilter;
+
+ public SecurityConfig(ApiKeyFilter apiKeyFilter) {
+ this.apiKeyFilter = apiKeyFilter;
+ }
+
+ @Bean
+ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+ http
+ .csrf(csrf -> csrf.disable()) // Disable CSRF for APIs
+ .addFilterBefore(apiKeyFilter, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.class)
+ .authorizeHttpRequests(auth -> auth
+ .requestMatchers("/api/portfolio").authenticated() // Secure the endpoint
+ .anyRequest().permitAll() // Allow other requests
+ );
+
+ return http.build();
+ }
+}
diff --git a/src/main/java/io/titan/portfolio/controller/EducationController.java b/src/main/java/io/titan/portfolio/controller/EducationController.java
index 3d11c7a..1129f15 100644
--- a/src/main/java/io/titan/portfolio/controller/EducationController.java
+++ b/src/main/java/io/titan/portfolio/controller/EducationController.java
@@ -3,22 +3,14 @@ package io.titan.portfolio.controller;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
-// import org.springframework.web.bind.annotation.DeleteMapping;
-// import org.springframework.web.bind.annotation.GetMapping;
-// import org.springframework.web.bind.annotation.PathVariable;
-// import org.springframework.web.bind.annotation.PostMapping;
-// import org.springframework.web.bind.annotation.PutMapping;
-// import org.springframework.web.bind.annotation.RequestBody;
-// import org.springframework.web.bind.annotation.RequestMapping;
-// import org.springframework.web.bind.annotation.RestController;
import io.titan.portfolio.model.Education;
import io.titan.portfolio.service.EducationService;
import java.util.List;
-@RestController
-@RequestMapping("/api/portfolio/education")
+// @RestController
+// @RequestMapping("/api/portfolio/education")
public class EducationController {
private final EducationService educationService;
@@ -26,25 +18,25 @@ public class EducationController {
this.educationService = educationService;
}
- @GetMapping
+ // @GetMapping
List getAllEducation(){
return educationService.getAllEducation();
}
- @GetMapping("/{id}")
+ // @GetMapping("/{id}")
ResponseEntity getEducationById(@PathVariable String id) {
return educationService.getEducationById(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
- @PostMapping
+ // @PostMapping
ResponseEntity createEducation(@RequestBody Education education) {
educationService.createEducation(education);
return ResponseEntity.status(HttpStatus.CREATED).build();
}
- @PutMapping("/{id}")
+ // @PutMapping("/{id}")
ResponseEntity updateEducation(@PathVariable String id, @RequestBody Education education) {
if (!id.equals(education.id())) {
return ResponseEntity.badRequest().build();
@@ -53,7 +45,7 @@ public class EducationController {
return ResponseEntity.ok(education);
}
- @DeleteMapping("/{id}")
+ // @DeleteMapping("/{id}")
ResponseEntity deleteEducation(@PathVariable String id) {
boolean deleted = educationService.deleteEducation(id);
return deleted ? ResponseEntity.ok().build() : ResponseEntity.notFound().build();
diff --git a/src/main/java/io/titan/portfolio/controller/PortfolioController.java b/src/main/java/io/titan/portfolio/controller/PortfolioController.java
new file mode 100644
index 0000000..a64585d
--- /dev/null
+++ b/src/main/java/io/titan/portfolio/controller/PortfolioController.java
@@ -0,0 +1,39 @@
+package io.titan.portfolio.controller;
+
+import io.titan.portfolio.model.Education;
+// import io.titan.portfolio.model.Experience;
+import io.titan.portfolio.service.EducationService;
+// import io.titan.portfolio.service.ExperienceService;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+// import org.springframework.beans.factory.annotation.Value;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/portfolio")
+public class PortfolioController {
+ private final EducationService educationService;
+
+ // @Value("${api.key}")
+ // private String apiKey;
+
+ PortfolioController(EducationService educationService){
+ this.educationService = educationService;
+ }
+
+ @GetMapping
+ public ResponseEntity