Skip to content

Commit 6cf5225

Browse files
committed
openApi config
1 parent d4534a1 commit 6cf5225

File tree

10 files changed

+85
-9
lines changed

10 files changed

+85
-9
lines changed

spring-backend/pom.xml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,23 @@
1818
<java.version>11</java.version>
1919
</properties>
2020
<dependencies>
21+
<dependency>
22+
<groupId>org.springframework.boot</groupId>
23+
<artifactId>spring-boot-starter-web</artifactId>
24+
</dependency>
25+
26+
<dependency>
27+
<groupId>org.springdoc</groupId>
28+
<artifactId>springdoc-openapi-ui</artifactId>
29+
<version>1.6.4</version>
30+
</dependency>
31+
32+
<dependency>
33+
<groupId>org.webjars</groupId>
34+
<artifactId>swagger-ui</artifactId>
35+
<version>4.10.3</version>
36+
</dependency>
37+
2138
<dependency>
2239
<groupId>com.cloudinary</groupId>
2340
<artifactId>cloudinary-taglib</artifactId>
@@ -42,7 +59,6 @@
4259
<optional>true</optional>
4360
</dependency>
4461

45-
4662
<dependency>
4763
<groupId>mysql</groupId>
4864
<artifactId>mysql-connector-java</artifactId>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package backend.hobbiebackend.config;
2+
3+
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
4+
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
5+
import io.swagger.v3.oas.annotations.info.Info;
6+
import io.swagger.v3.oas.annotations.security.SecurityScheme;
7+
import org.springframework.context.annotation.Configuration;
8+
9+
@Configuration
10+
@OpenAPIDefinition(info = @Info(title = "My API", version = "v3"))
11+
@SecurityScheme(
12+
name = "bearerAuth",
13+
type = SecuritySchemeType.HTTP,
14+
bearerFormat = "JWT",
15+
scheme = "bearer"
16+
)
17+
public class OpenApi30Config {
18+
19+
}

spring-backend/src/main/java/backend/hobbiebackend/config/SecurityConfiguration.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.springframework.security.authentication.AuthenticationManager;
99
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
1010
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
11+
import org.springframework.security.config.annotation.web.builders.WebSecurity;
1112
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
1213
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
1314
import org.springframework.security.config.http.SessionCreationPolicy;
@@ -38,6 +39,14 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
3839
auth.userDetailsService(hobbieUserDetailsService);
3940
}
4041

42+
@Override
43+
public void configure(final WebSecurity webSecurity) {
44+
webSecurity.ignoring().antMatchers(
45+
"/v3/api-docs/**",
46+
"/swagger-ui/**",
47+
"/swagger-ui/index.html");
48+
}
49+
4150
@Override
4251
@Bean
4352
public AuthenticationManager authenticationManagerBean() throws Exception {
@@ -50,7 +59,8 @@ protected void configure(HttpSecurity http) throws Exception {
5059
http.csrf()
5160
.disable()
5261
.authorizeRequests()
53-
.antMatchers("/register","/signup","/authenticate", "/notification", "/password")
62+
.antMatchers("/register","/signup","/authenticate", "/notification", "/password","/swagger-ui/index.html","/v3/api-docs","/configuration/ui","/swagger-resources/**",
63+
"/configuration/security","/swagger-ui/*","/webjars/**","/v3/**")
5464
.permitAll()
5565
.anyRequest()
5666
.authenticated()

spring-backend/src/main/java/backend/hobbiebackend/service/HobbyService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public interface HobbyService {
1818

1919
boolean deleteHobby(long id) throws Exception;
2020

21-
// List<Hobby> initHobbyOffers();
2221

2322
Set<Hobby> findHobbyMatches(String username);
2423

spring-backend/src/main/java/backend/hobbiebackend/web/HobbyController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import backend.hobbiebackend.service.HobbyService;
99
import backend.hobbiebackend.service.LocationService;
1010
import backend.hobbiebackend.service.UserService;
11+
import io.swagger.v3.oas.annotations.Operation;
12+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
1113
import org.modelmapper.ModelMapper;
1214
import org.springframework.beans.factory.annotation.Autowired;
1315
import org.springframework.http.HttpStatus;
@@ -68,18 +70,21 @@ public ResponseEntity<HttpStatus> saveHobby(@RequestBody HobbyInfoDto info){
6870
}
6971

7072
@GetMapping(value ="/is-saved")
73+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
7174
public boolean isHobbySaved(@RequestParam Long id, @RequestParam String username){
7275
return this.hobbyService.isHobbySaved(id, username);
7376
}
7477

7578
@GetMapping(value ="/{id}")
79+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
7680
public Hobby getHobbyDetails(@PathVariable Long id){
7781

7882
return this.hobbyService.findHobbieById(id);
7983
}
8084

8185

8286
@PostMapping ("/save")
87+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
8388
public ResponseEntity<Long> save(@RequestParam Long id, @RequestParam String username){
8489
Hobby hobby = this.hobbyService.findHobbieById(id);
8590

@@ -94,6 +99,7 @@ public ResponseEntity<Long> save(@RequestParam Long id, @RequestParam String use
9499
}
95100

96101
@DeleteMapping("/remove")
102+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
97103
public ResponseEntity<Long> removeHobby(@RequestParam Long id, @RequestParam String username){
98104

99105
Hobby hobby = this.hobbyService.findHobbieById(id);
@@ -109,6 +115,7 @@ public ResponseEntity<Long> removeHobby(@RequestParam Long id, @RequestParam Str
109115

110116

111117
@PutMapping
118+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
112119
public ResponseEntity<?> updateHobby(@RequestBody HobbyInfoUpdateDto info) throws Exception {
113120
Hobby offer = this.modelMapper.map(info, Hobby.class);
114121
Category category = this.categoryService.findByName(info.getCategory());
@@ -121,6 +128,7 @@ public ResponseEntity<?> updateHobby(@RequestBody HobbyInfoUpdateDto info) throw
121128
}
122129

123130
@DeleteMapping("/{id}")
131+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
124132
public ResponseEntity<Long> deleteHobby(@PathVariable Long id) throws Exception {
125133
boolean isRemoved = this.hobbyService.deleteHobby(id);
126134

@@ -131,6 +139,7 @@ public ResponseEntity<Long> deleteHobby(@PathVariable Long id) throws Exception
131139
}
132140

133141
@GetMapping("/saved")
142+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
134143
public List<Hobby> savedHobbies(@RequestParam String username) {
135144
AppClient appClient = this.userService.findAppClientByUsername(username);
136145
return this.hobbyService.findSavedHobbies(appClient);

spring-backend/src/main/java/backend/hobbiebackend/web/HomeController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import backend.hobbiebackend.service.HobbyService;
88
import backend.hobbiebackend.service.UserRoleService;
99
import backend.hobbiebackend.service.UserService;
10+
import io.swagger.v3.oas.annotations.Operation;
11+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
1012
import org.springframework.beans.factory.annotation.Autowired;
1113
import org.springframework.web.bind.annotation.*;
1214

@@ -28,6 +30,7 @@ public HomeController(HobbyService hobbyService) {
2830
}
2931

3032
@GetMapping( "/home")
33+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
3134
public Set<Hobby> hobbiesShow(@RequestParam String username,@RequestParam String role) {
3235

3336
if(role.equals("user")){

spring-backend/src/main/java/backend/hobbiebackend/web/TestController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import backend.hobbiebackend.model.entities.Test;
55
import backend.hobbiebackend.service.TestService;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
68
import org.springframework.beans.factory.annotation.Autowired;
79
import org.springframework.http.HttpStatus;
810
import org.springframework.http.ResponseEntity;
@@ -25,6 +27,7 @@ public TestController(TestService testService) {
2527

2628

2729
@PostMapping("/test")
30+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
2831
public ResponseEntity<HttpStatus> saveTestResults(@RequestBody Test results) {
2932
this.testService.saveTestResults(results);
3033
return new ResponseEntity<>(HttpStatus.CREATED);

spring-backend/src/main/java/backend/hobbiebackend/web/UserController.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import backend.hobbiebackend.service.NotificationService;
1717
import backend.hobbiebackend.service.UserService;
1818
import backend.hobbiebackend.utility.JWTUtility;
19+
import io.swagger.v3.oas.annotations.Operation;
20+
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
1921
import org.springframework.beans.factory.annotation.Autowired;
2022
import org.springframework.http.HttpStatus;
2123
import org.springframework.http.ResponseEntity;
@@ -49,7 +51,6 @@ public UserController(UserService userService, PasswordEncoder passwordEncoder,
4951
this.passwordEncoder = passwordEncoder;
5052
this.notificationService = notificationService;
5153
this.jwtUtility = jwtUtility;
52-
5354
this.authenticationManager = authenticationManager;
5455
this.hobbieUserDetailsService = hobbieUserDetailsService;
5556
}
@@ -72,7 +73,6 @@ public ResponseEntity<?> signup(@RequestBody AppClientSignUpDto user){
7273
@PostMapping("/register")
7374
public ResponseEntity<?> registerBusiness(@RequestBody BusinessRegisterDto business){
7475

75-
7676
if(this.userService.businessExists(business.getBusinessName() ) || this.userService.userExists(business.getUsername(), business.getEmail())){
7777
throw new RuntimeException("Username or email address already in use.");
7878
}
@@ -86,17 +86,20 @@ public ResponseEntity<?> registerBusiness(@RequestBody BusinessRegisterDto busin
8686

8787

8888
@GetMapping("/client")
89+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
8990
public AppClient showUserDetails(@RequestParam String username) {
9091
return this.userService.findAppClientByUsername(username);
9192
}
9293

9394

9495
@GetMapping("/business")
96+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
9597
public BusinessOwner showBusinessDetails(@RequestParam String username) {
9698
return this.userService.findBusinessByUsername(username);
9799
}
98100

99101
@PutMapping("/user")
102+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
100103
public ResponseEntity<?> updateUser(@RequestBody UpdateAppClientDto user) {
101104

102105
AppClient client = this.userService.findAppClientById(user.getId());
@@ -110,6 +113,7 @@ public ResponseEntity<?> updateUser(@RequestBody UpdateAppClientDto user) {
110113

111114
}
112115
@PostMapping ("/notification")
116+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
113117
public ResponseEntity<?> sendNotification(@RequestParam("email") String e) {
114118
UserEntity userByEmail = this.userService.findUserByEmail(e);
115119

@@ -122,6 +126,7 @@ public ResponseEntity<?> sendNotification(@RequestParam("email") String e) {
122126
return new ResponseEntity<>(userByEmail, HttpStatus.OK);
123127
}
124128
@PostMapping("/password")
129+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
125130
public ResponseEntity<?> setUpNewPassword(@RequestParam Long id, String password) {
126131
UserEntity userById = this.userService.findUserById(id);
127132
userById.setPassword(this.passwordEncoder.encode(password));
@@ -130,6 +135,7 @@ public ResponseEntity<?> setUpNewPassword(@RequestParam Long id, String passwor
130135
}
131136

132137
@PutMapping("/business")
138+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
133139
public ResponseEntity<?> updateBusiness(@RequestBody UpdateBusinessDto business) {
134140

135141
BusinessOwner businessOwner = this.userService.findBusinessOwnerById(business.getId());
@@ -145,6 +151,7 @@ public ResponseEntity<?> updateBusiness(@RequestBody UpdateBusinessDto business
145151

146152
}
147153
@DeleteMapping("/user/{id}")
154+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
148155
public ResponseEntity<Long> deleteUser(@PathVariable Long id){
149156

150157
boolean isRemoved = this.userService.deleteUser(id);
@@ -181,6 +188,7 @@ public JwtResponse authenticate(@RequestBody JwtRequest jwtRequest) throws Excep
181188

182189
@PostMapping("/login")
183190
@CrossOrigin(origins = "http://localhost:4200")
191+
@Operation(summary = "My endpoint", security = @SecurityRequirement(name = "bearerAuth"))
184192
public String logInUser(@RequestParam String username){
185193
UserEntity userByUsername = this.userService.findUserByUsername(username);
186194
if (userByUsername.getRoles().stream()

spring-backend/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
"name": "jwt.secret",
1515
"type": "java.lang.String",
1616
"description": "Description for jwt.secret."
17+
},
18+
{
19+
"name": "springdoc.swagger-ui.disable-swagger-default-url",
20+
"type": "java.lang.String",
21+
"description": "Description for springdoc.swagger-ui.disable-swagger-default-url."
1722
}
1823
]
1924
}

spring-backend/src/main/resources/application.properties

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@ spring.servlet.multipart.max-file-size=10MB
1717
spring.servlet.multipart.max-request-size=10MB
1818
spring.mail.host=smtp.gmail.com
1919
spring.mail.port=25
20-
spring.mail.username=findyourhobbie@gmail.com
21-
spring.mail.password=scejyiuhzjzqhezl
20+
spring.mail.username=*****
21+
spring.mail.password=*****
2222
spring.mail.protocol=smtp
2323
spring.mail.properties.mail.smtp.starttls.enable=true
2424
spring.mail.default-encoding=UTF-8
25-
#spring.security.user.name=user
26-
#spring.security.user.password=123
25+
springdoc.swagger-ui.use-root-path=true
26+
springdoc.swagger-ui.config-url=/v3/api-docs/swagger-config
27+
springdoc.swagger-ui.disable-swagger-default-url=true
28+
springdoc.swagger-ui.url=/v3/api-docs
29+
30+
2731

2832
jwt.secret= secretly123

0 commit comments

Comments
 (0)