diff --git a/backend/pom.xml b/backend/pom.xml
index 4155038..a7d27bf 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -92,6 +92,10 @@
org.flywaydb
flyway-core
+
+ org.hibernate.validator
+ hibernate-validator
+
diff --git a/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java b/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java
index 889989b..705dac6 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/config/SecurityConfiguration.java
@@ -3,26 +3,22 @@ package de.grimsi.gameyfin.config;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
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.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.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
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.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.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+@Configuration
@EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true)
+@EnableMethodSecurity
@RequiredArgsConstructor
public class SecurityConfiguration {
@@ -33,7 +29,7 @@ public class SecurityConfiguration {
private String password;
@Bean
- protected SecurityFilterChain httpSecurity(HttpSecurity http) throws Exception {
+ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.headers().frameOptions().disable();
http.httpBasic(Customizer.withDefaults());
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/Company.java b/backend/src/main/java/de/grimsi/gameyfin/entities/Company.java
index 95a2e20..0369b39 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/Company.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/Company.java
@@ -3,9 +3,9 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java b/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java
index cd82c26..da790b7 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/DetectedGame.java
@@ -5,7 +5,7 @@ import lombok.*;
import org.hibernate.Hibernate;
import org.hibernate.annotations.CreationTimestamp;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.time.Instant;
import java.util.List;
import java.util.Objects;
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/Genre.java b/backend/src/main/java/de/grimsi/gameyfin/entities/Genre.java
index 9dc0119..021caa3 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/Genre.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/Genre.java
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/Keyword.java b/backend/src/main/java/de/grimsi/gameyfin/entities/Keyword.java
index 38067ad..87c96fe 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/Keyword.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/Keyword.java
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/Library.java b/backend/src/main/java/de/grimsi/gameyfin/entities/Library.java
index 7b94396..3db1fb5 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/Library.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/Library.java
@@ -3,7 +3,7 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.util.List;
import java.util.Objects;
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/Platform.java b/backend/src/main/java/de/grimsi/gameyfin/entities/Platform.java
index 0569716..d4decf6 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/Platform.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/Platform.java
@@ -3,9 +3,9 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/PlayerPerspective.java b/backend/src/main/java/de/grimsi/gameyfin/entities/PlayerPerspective.java
index 68b6161..692c2fd 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/PlayerPerspective.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/PlayerPerspective.java
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/Theme.java b/backend/src/main/java/de/grimsi/gameyfin/entities/Theme.java
index 32dd3cc..606933b 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/Theme.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/Theme.java
@@ -3,8 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
import java.util.Objects;
@Entity
diff --git a/backend/src/main/java/de/grimsi/gameyfin/entities/UnmappableFile.java b/backend/src/main/java/de/grimsi/gameyfin/entities/UnmappableFile.java
index d58e220..7157706 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/entities/UnmappableFile.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/entities/UnmappableFile.java
@@ -3,7 +3,8 @@ package de.grimsi.gameyfin.entities;
import lombok.*;
import org.hibernate.Hibernate;
-import javax.persistence.*;
+import jakarta.persistence.*;
+
import java.util.Objects;
@Entity
@@ -18,7 +19,8 @@ public class UnmappableFile {
}
@Id
- @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "HIBERNATE_SEQUENCE")
+ @SequenceGenerator(name = "HIBERNATE_SEQUENCE", allocationSize = 1)
private Long id;
private String path;
diff --git a/backend/src/main/java/de/grimsi/gameyfin/igdb/IgdbWrapper.java b/backend/src/main/java/de/grimsi/gameyfin/igdb/IgdbWrapper.java
index 85cfb7e..d52dca6 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/igdb/IgdbWrapper.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/igdb/IgdbWrapper.java
@@ -18,7 +18,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriComponentsBuilder;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import java.net.URI;
import java.util.Collection;
import java.util.Collections;
diff --git a/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java b/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java
index f92eaf2..367891f 100644
--- a/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java
+++ b/backend/src/main/java/de/grimsi/gameyfin/service/ImageService.java
@@ -15,7 +15,7 @@ import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.WebClientResponseException;
import reactor.core.publisher.Flux;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import java.util.Collections;
import java.util.List;
import java.util.Map;
diff --git a/backend/src/test/java/de/grimsi/gameyfin/repositories/UnmappableFileRepositoryTest.java b/backend/src/test/java/de/grimsi/gameyfin/repositories/UnmappableFileRepositoryTest.java
index 38f1309..1f5a003 100644
--- a/backend/src/test/java/de/grimsi/gameyfin/repositories/UnmappableFileRepositoryTest.java
+++ b/backend/src/test/java/de/grimsi/gameyfin/repositories/UnmappableFileRepositoryTest.java
@@ -1,7 +1,6 @@
package de.grimsi.gameyfin.repositories;
import de.grimsi.gameyfin.entities.UnmappableFile;
-import de.grimsi.gameyfin.service.FilesystemService;
import org.jeasy.random.EasyRandom;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
diff --git a/backend/src/test/java/de/grimsi/gameyfin/service/GameServiceTest.java b/backend/src/test/java/de/grimsi/gameyfin/service/GameServiceTest.java
index e1aba5a..36ebf51 100644
--- a/backend/src/test/java/de/grimsi/gameyfin/service/GameServiceTest.java
+++ b/backend/src/test/java/de/grimsi/gameyfin/service/GameServiceTest.java
@@ -95,7 +95,7 @@ class GameServiceTest {
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);
}
@@ -257,7 +257,7 @@ class GameServiceTest {
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, 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()));
- 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)).findByPath(input.getPath());
verify(unmappableFileRepositoryMock, times(1)).findByPath(input.getPath());
@@ -311,7 +311,7 @@ class GameServiceTest {
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);
}
}
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index dc8d824..86cbd28 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "frontend",
- "version": "1.3.2-SNAPSHOT",
+ "version": "1.4.0-SNAPSHOT",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "frontend",
- "version": "1.3.2-SNAPSHOT",
+ "version": "1.4.0-SNAPSHOT",
"dependencies": {
"@angular/animations": "^14.0.0",
"@angular/cdk": "^14.1.0",
@@ -19,7 +19,7 @@
"@angular/platform-browser": "^14.0.0",
"@angular/platform-browser-dynamic": "^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",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
@@ -705,16 +705,16 @@
}
},
"node_modules/@angular/youtube-player": {
- "version": "15.2.2",
- "resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-15.2.2.tgz",
- "integrity": "sha512-C4tx9TPtAQUS00Z15ynqQvTkudEWaDtNWt/WWMfusQ2W4bzK2gAukDNgZrhQ41HpC8q0zms4+C9VuwPxU5+UQQ==",
+ "version": "14.2.7",
+ "resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-14.2.7.tgz",
+ "integrity": "sha512-/TtM2QtCIfrhUbrCd79g0jI/BzNMKNmvKR/oKVpAqfH2UZveJOq1YNNJG9Rw+rXE2yIteKNkco8ADU4Sz+32LQ==",
"dependencies": {
"@types/youtube": "^0.0.42",
"tslib": "^2.3.0"
},
"peerDependencies": {
- "@angular/common": "^15.0.0 || ^16.0.0",
- "@angular/core": "^15.0.0 || ^16.0.0",
+ "@angular/common": "^14.0.0 || ^15.0.0",
+ "@angular/core": "^14.0.0 || ^15.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -12673,9 +12673,9 @@
}
},
"@angular/youtube-player": {
- "version": "15.2.2",
- "resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-15.2.2.tgz",
- "integrity": "sha512-C4tx9TPtAQUS00Z15ynqQvTkudEWaDtNWt/WWMfusQ2W4bzK2gAukDNgZrhQ41HpC8q0zms4+C9VuwPxU5+UQQ==",
+ "version": "14.2.7",
+ "resolved": "https://registry.npmjs.org/@angular/youtube-player/-/youtube-player-14.2.7.tgz",
+ "integrity": "sha512-/TtM2QtCIfrhUbrCd79g0jI/BzNMKNmvKR/oKVpAqfH2UZveJOq1YNNJG9Rw+rXE2yIteKNkco8ADU4Sz+32LQ==",
"requires": {
"@types/youtube": "^0.0.42",
"tslib": "^2.3.0"
diff --git a/frontend/package.json b/frontend/package.json
index 20f45a4..62e4964 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "frontend",
- "version": "1.3.2-SNAPSHOT",
+ "version": "1.4.0-SNAPSHOT",
"scripts": {
"ng": "ng",
"start": "ng serve",
@@ -21,7 +21,7 @@
"@angular/platform-browser": "^14.0.0",
"@angular/platform-browser-dynamic": "^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",
"rxjs": "~7.5.0",
"tslib": "^2.3.0",
diff --git a/pom.xml b/pom.xml
index fc8948e..be44c49 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
org.springframework.boot
spring-boot-starter-parent
- 2.7.5
+ 3.0.5