Update backend to Spring Boot 3 (#111)

* Update Spring Boot to 3.0.5
This commit is contained in:
Simon
2023-04-09 01:41:54 +02:00
committed by GitHub
parent 1c386041aa
commit 2231077935
18 changed files with 49 additions and 48 deletions
+4
View File
@@ -92,6 +92,10 @@
<groupId>org.flywaydb</groupId> <groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId> <artifactId>flyway-core</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<!-- File handling --> <!-- File handling -->
@@ -3,26 +3,22 @@ package de.grimsi.gameyfin.config;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer; import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
import org.springframework.security.web.firewall.HttpFirewall;
import org.springframework.security.web.firewall.StrictHttpFirewall;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@Configuration
@EnableWebSecurity @EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true) @EnableMethodSecurity
@RequiredArgsConstructor @RequiredArgsConstructor
public class SecurityConfiguration { public class SecurityConfiguration {
@@ -33,7 +29,7 @@ public class SecurityConfiguration {
private String password; private String password;
@Bean @Bean
protected SecurityFilterChain httpSecurity(HttpSecurity http) throws Exception { public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable(); http.csrf().disable();
http.headers().frameOptions().disable(); http.headers().frameOptions().disable();
http.httpBasic(Customizer.withDefaults()); http.httpBasic(Customizer.withDefaults());
@@ -3,9 +3,9 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -5,7 +5,7 @@ import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*; import jakarta.persistence.*;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -3,7 +3,7 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.*; import jakarta.persistence.*;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -3,9 +3,9 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.Column; import jakarta.persistence.Column;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.Entity; import jakarta.persistence.Entity;
import javax.persistence.Id; import jakarta.persistence.Id;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -3,7 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*; import lombok.*;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import javax.persistence.*; import jakarta.persistence.*;
import java.util.Objects; import java.util.Objects;
@Entity @Entity
@@ -18,7 +19,8 @@ public class UnmappableFile {
} }
@Id @Id
@GeneratedValue(strategy = GenerationType.SEQUENCE) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HIBERNATE_SEQUENCE")
@SequenceGenerator(name = "HIBERNATE_SEQUENCE", allocationSize = 1)
private Long id; private Long id;
private String path; private String path;
@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriComponentsBuilder; import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import java.net.URI; import java.net.URI;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@@ -15,7 +15,7 @@ import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClientResponseException; import org.springframework.web.reactive.function.client.WebClientResponseException;
import reactor.core.publisher.Flux; import reactor.core.publisher.Flux;
import javax.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -1,7 +1,6 @@
package de.grimsi.gameyfin.repositories; package de.grimsi.gameyfin.repositories;
import de.grimsi.gameyfin.entities.UnmappableFile; import de.grimsi.gameyfin.entities.UnmappableFile;
import de.grimsi.gameyfin.service.FilesystemService;
import org.jeasy.random.EasyRandom; import org.jeasy.random.EasyRandom;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -95,7 +95,7 @@ class GameServiceTest {
ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.getDetectedGame(slug)); ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.getDetectedGame(slug));
assertThat(e.getStatus()).isEqualTo(HttpStatus.NOT_FOUND); assertThat(e.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
verify(detectedGameRepositoryMock, times(1)).findById(slug); verify(detectedGameRepositoryMock, times(1)).findById(slug);
} }
@@ -257,7 +257,7 @@ class GameServiceTest {
ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.mapPathToGame(input.getPath(), input.getSlug())); ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.mapPathToGame(input.getPath(), input.getSlug()));
assertThat(e.getStatus()).isEqualTo(HttpStatus.CONFLICT); assertThat(e.getStatusCode()).isEqualTo(HttpStatus.CONFLICT);
verify(detectedGameRepositoryMock, times(1)).existsBySlug(input.getSlug()); verify(detectedGameRepositoryMock, times(1)).existsBySlug(input.getSlug());
verify(detectedGameRepositoryMock, never()).findByPath(input.getPath()); verify(detectedGameRepositoryMock, never()).findByPath(input.getPath());
verify(unmappableFileRepositoryMock, never()).findByPath(input.getPath()); verify(unmappableFileRepositoryMock, never()).findByPath(input.getPath());
@@ -273,7 +273,7 @@ class GameServiceTest {
ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.mapPathToGame(input.getPath(), input.getSlug())); ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.mapPathToGame(input.getPath(), input.getSlug()));
assertThat(e.getStatus()).isEqualTo(HttpStatus.NOT_FOUND); assertThat(e.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
verify(detectedGameRepositoryMock, times(1)).existsBySlug(input.getSlug()); verify(detectedGameRepositoryMock, times(1)).existsBySlug(input.getSlug());
verify(detectedGameRepositoryMock, times(1)).findByPath(input.getPath()); verify(detectedGameRepositoryMock, times(1)).findByPath(input.getPath());
verify(unmappableFileRepositoryMock, times(1)).findByPath(input.getPath()); verify(unmappableFileRepositoryMock, times(1)).findByPath(input.getPath());
@@ -311,7 +311,7 @@ class GameServiceTest {
ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.refreshGame(slug)); ResponseStatusException e = assertThrows(ResponseStatusException.class, () -> target.refreshGame(slug));
assertThat(e.getStatus()).isEqualTo(HttpStatus.NOT_FOUND); assertThat(e.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
verify(detectedGameRepositoryMock, times(1)).findById(slug); verify(detectedGameRepositoryMock, times(1)).findById(slug);
} }
} }
+11 -11
View File
@@ -1,12 +1,12 @@
{ {
"name": "frontend", "name": "frontend",
"version": "1.3.2-SNAPSHOT", "version": "1.4.0-SNAPSHOT",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "frontend", "name": "frontend",
"version": "1.3.2-SNAPSHOT", "version": "1.4.0-SNAPSHOT",
"dependencies": { "dependencies": {
"@angular/animations": "^14.0.0", "@angular/animations": "^14.0.0",
"@angular/cdk": "^14.1.0", "@angular/cdk": "^14.1.0",
@@ -19,7 +19,7 @@
"@angular/platform-browser": "^14.0.0", "@angular/platform-browser": "^14.0.0",
"@angular/platform-browser-dynamic": "^14.0.0", "@angular/platform-browser-dynamic": "^14.0.0",
"@angular/router": "^14.0.0", "@angular/router": "^14.0.0",
"@angular/youtube-player": "^15.2.2", "@angular/youtube-player": "^14.2.7",
"mat-table-filter": "^10.2.0", "mat-table-filter": "^10.2.0",
"rxjs": "~7.5.0", "rxjs": "~7.5.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
@@ -705,16 +705,16 @@
} }
}, },
"node_modules/@angular/youtube-player": { "node_modules/@angular/youtube-player": {
"version": "15.2.2", "version": "14.2.7",
"resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-14.2.7.tgz",
"integrity": "sha512-C4tx9TPtAQUS00Z15ynqQvTkudEWaDtNWt/WWMfusQ2W4bzK2gAukDNgZrhQ41HpC8q0zms4+C9VuwPxU5+UQQ==", "integrity": "sha512-/TtM2QtCIfrhUbrCd79g0jI/BzNMKNmvKR/oKVpAqfH2UZveJOq1YNNJG9Rw+rXE2yIteKNkco8ADU4Sz+32LQ==",
"dependencies": { "dependencies": {
"@types/youtube": "^0.0.42", "@types/youtube": "^0.0.42",
"tslib": "^2.3.0" "tslib": "^2.3.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": "^15.0.0 || ^16.0.0", "@angular/common": "^14.0.0 || ^15.0.0",
"@angular/core": "^15.0.0 || ^16.0.0", "@angular/core": "^14.0.0 || ^15.0.0",
"rxjs": "^6.5.3 || ^7.4.0" "rxjs": "^6.5.3 || ^7.4.0"
} }
}, },
@@ -12673,9 +12673,9 @@
} }
}, },
"@angular/youtube-player": { "@angular/youtube-player": {
"version": "15.2.2", "version": "14.2.7",
"resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-15.2.2.tgz", "resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-14.2.7.tgz",
"integrity": "sha512-C4tx9TPtAQUS00Z15ynqQvTkudEWaDtNWt/WWMfusQ2W4bzK2gAukDNgZrhQ41HpC8q0zms4+C9VuwPxU5+UQQ==", "integrity": "sha512-/TtM2QtCIfrhUbrCd79g0jI/BzNMKNmvKR/oKVpAqfH2UZveJOq1YNNJG9Rw+rXE2yIteKNkco8ADU4Sz+32LQ==",
"requires": { "requires": {
"@types/youtube": "^0.0.42", "@types/youtube": "^0.0.42",
"tslib": "^2.3.0" "tslib": "^2.3.0"
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"name": "frontend", "name": "frontend",
"version": "1.3.2-SNAPSHOT", "version": "1.4.0-SNAPSHOT",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
@@ -21,7 +21,7 @@
"@angular/platform-browser": "^14.0.0", "@angular/platform-browser": "^14.0.0",
"@angular/platform-browser-dynamic": "^14.0.0", "@angular/platform-browser-dynamic": "^14.0.0",
"@angular/router": "^14.0.0", "@angular/router": "^14.0.0",
"@angular/youtube-player": "^15.2.2", "@angular/youtube-player": "^14.2.7",
"mat-table-filter": "^10.2.0", "mat-table-filter": "^10.2.0",
"rxjs": "~7.5.0", "rxjs": "~7.5.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
+1 -1
View File
@@ -18,7 +18,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version> <version>3.0.5</version>
<relativePath /> <!-- lookup parent from repository --> <relativePath /> <!-- lookup parent from repository -->
</parent> </parent>