mirror of
https://github.com/AJMicke/KickerELO.git
synced 2026-03-12 05:51:05 +01:00
Add connection to fs auth provider, redirect not tested
This commit is contained in:
5
pom.xml
5
pom.xml
@@ -72,6 +72,11 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-oauth2-client</artifactId>
|
<artifactId>spring-boot-starter-oauth2-client</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.github.cdimascio</groupId>
|
||||||
|
<artifactId>dotenv-java</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<dependencyManagement>
|
<dependencyManagement>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package org.kickerelo.kickerelo.config;
|
||||||
|
|
||||||
|
import io.github.cdimascio.dotenv.Dotenv;
|
||||||
|
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.oauth2.client.registration.ClientRegistration;
|
||||||
|
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
|
||||||
|
import org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository;
|
||||||
|
import org.springframework.security.oauth2.core.AuthorizationGrantType;
|
||||||
|
import org.springframework.security.web.SecurityFilterChain;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class SecurityConfig {
|
||||||
|
|
||||||
|
private final Dotenv dotenv = Dotenv.load();
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ClientRegistrationRepository clientRegistrationRepository() {
|
||||||
|
ClientRegistration oidcRegistration = ClientRegistration.withRegistrationId("oidc")
|
||||||
|
.clientId(dotenv.get("OIDC_CLIENT_ID"))
|
||||||
|
.clientSecret(dotenv.get("OIDC_CLIENT_SECRET"))
|
||||||
|
.scope("openid", "profile", "email")
|
||||||
|
.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
|
||||||
|
.authorizationUri(dotenv.get("OIDC_ISSUER_BASE_URI") + "application/o/authorize/")
|
||||||
|
.tokenUri(dotenv.get("OIDC_ISSUER_BASE_URI") + "application/o/token/")
|
||||||
|
.userInfoUri(dotenv.get("OIDC_ISSUER_BASE_URI") + "application/o/userinfo/")
|
||||||
|
.userNameAttributeName("sub")
|
||||||
|
.clientName("OIDC")
|
||||||
|
.redirectUri(dotenv.get("OIDC_REDIRECT_URI"))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
return new InMemoryClientRegistrationRepository(oidcRegistration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||||
|
http
|
||||||
|
.authorizeHttpRequests(auth -> auth
|
||||||
|
.requestMatchers("/oauth2/**").permitAll() // Allow all OAuth2 requests
|
||||||
|
.anyRequest().permitAll() // Allow all requests
|
||||||
|
)
|
||||||
|
.oauth2Login()
|
||||||
|
.and()
|
||||||
|
.logout(logout -> logout.logoutSuccessUrl("/"))
|
||||||
|
.csrf(csrf -> csrf.disable());
|
||||||
|
|
||||||
|
return http.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,6 +67,15 @@ public class KickerAppLayout extends AppLayout {
|
|||||||
new SideNavItem("Historie", History2vs2View.class, VaadinIcon.RECORDS.create()),
|
new SideNavItem("Historie", History2vs2View.class, VaadinIcon.RECORDS.create()),
|
||||||
new SideNavItem("Statistik", Stat2vs2View.class, VaadinIcon.ABACUS.create()));
|
new SideNavItem("Statistik", Stat2vs2View.class, VaadinIcon.ABACUS.create()));
|
||||||
|
|
||||||
|
// add additional nav item if user is logged in
|
||||||
|
if (isAuthenticated) {
|
||||||
|
SideNav nav3 = new SideNav("Admin");
|
||||||
|
nav3.setCollapsible(true);
|
||||||
|
nav3.addItem(new SideNavItem("Delete Internet", AdminView.class, VaadinIcon.COG.create()),
|
||||||
|
new SideNavItem("Current User: " + auth.getName(), AdminView.class, VaadinIcon.COG.create()));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Image githubLogo = new Image("github-mark.png", "Github");
|
Image githubLogo = new Image("github-mark.png", "Github");
|
||||||
githubLogo.setHeight("30px");
|
githubLogo.setHeight("30px");
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.kickerelo.kickerelo.exception.InvalidDataException;
|
|||||||
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
|
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
|
||||||
import org.kickerelo.kickerelo.service.KickerEloService;
|
import org.kickerelo.kickerelo.service.KickerEloService;
|
||||||
|
|
||||||
@Route("admin")
|
@Route("app/admin")
|
||||||
public class AdminView extends VerticalLayout {
|
public class AdminView extends VerticalLayout {
|
||||||
public AdminView(KickerEloService service) {
|
public AdminView(KickerEloService service) {
|
||||||
H2 subheader = new H2("Verwaltung");
|
H2 subheader = new H2("Verwaltung");
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import com.github.appreciated.apexcharts.config.yaxis.Title;
|
|||||||
import com.github.appreciated.apexcharts.helper.Series;
|
import com.github.appreciated.apexcharts.helper.Series;
|
||||||
import com.vaadin.flow.component.UI;
|
import com.vaadin.flow.component.UI;
|
||||||
import com.vaadin.flow.component.button.Button;
|
import com.vaadin.flow.component.button.Button;
|
||||||
|
import com.vaadin.flow.router.Route;
|
||||||
import com.vaadin.flow.server.VaadinService;
|
import com.vaadin.flow.server.VaadinService;
|
||||||
import com.vaadin.flow.theme.lumo.Lumo;
|
import com.vaadin.flow.theme.lumo.Lumo;
|
||||||
import org.kickerelo.kickerelo.data.Spieler;
|
import org.kickerelo.kickerelo.data.Spieler;
|
||||||
@@ -24,6 +25,7 @@ import org.kickerelo.kickerelo.util.Spieler1vs1EloComparator;
|
|||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Route(value = "app/chart1vs1")
|
||||||
public class Chart1vs1 extends ApexChartsBuilder {
|
public class Chart1vs1 extends ApexChartsBuilder {
|
||||||
public Chart1vs1(List<Spieler> l) {
|
public Chart1vs1(List<Spieler> l) {
|
||||||
Theme theme = new Theme();
|
Theme theme = new Theme();
|
||||||
|
|||||||
@@ -12,11 +12,14 @@ import com.github.appreciated.apexcharts.config.theme.Mode;
|
|||||||
import com.github.appreciated.apexcharts.config.theme.Monochrome;
|
import com.github.appreciated.apexcharts.config.theme.Monochrome;
|
||||||
import com.github.appreciated.apexcharts.config.xaxis.Labels;
|
import com.github.appreciated.apexcharts.config.xaxis.Labels;
|
||||||
import com.github.appreciated.apexcharts.helper.Series;
|
import com.github.appreciated.apexcharts.helper.Series;
|
||||||
|
import com.vaadin.flow.router.Route;
|
||||||
|
|
||||||
import org.kickerelo.kickerelo.data.Spieler;
|
import org.kickerelo.kickerelo.data.Spieler;
|
||||||
import org.kickerelo.kickerelo.util.Spieler2vs2EloComparator;
|
import org.kickerelo.kickerelo.util.Spieler2vs2EloComparator;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@Route(value = "app/chart1vs1")
|
||||||
public class Chart2vs2 extends ApexChartsBuilder {
|
public class Chart2vs2 extends ApexChartsBuilder {
|
||||||
public Chart2vs2(List<Spieler> l) {
|
public Chart2vs2(List<Spieler> l) {
|
||||||
Theme theme = new Theme();
|
Theme theme = new Theme();
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.kickerelo.kickerelo.exception.NoSuchPlayerException;
|
|||||||
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
|
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
|
||||||
import org.kickerelo.kickerelo.service.KickerEloService;
|
import org.kickerelo.kickerelo.service.KickerEloService;
|
||||||
|
|
||||||
@Route(value = "enter1vs1")
|
@Route(value = "app/enter1vs1")
|
||||||
public class Enter1vs1View extends VerticalLayout {
|
public class Enter1vs1View extends VerticalLayout {
|
||||||
|
|
||||||
public Enter1vs1View(KickerEloService eloService) {
|
public Enter1vs1View(KickerEloService eloService) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import org.kickerelo.kickerelo.exception.NoSuchPlayerException;
|
|||||||
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
|
import org.kickerelo.kickerelo.exception.PlayerNameNotSetException;
|
||||||
import org.kickerelo.kickerelo.service.KickerEloService;
|
import org.kickerelo.kickerelo.service.KickerEloService;
|
||||||
|
|
||||||
@Route(value = "enter2vs2")
|
@Route(value = "app/enter2vs2")
|
||||||
public class Enter2vs2View extends VerticalLayout {
|
public class Enter2vs2View extends VerticalLayout {
|
||||||
public Enter2vs2View(KickerEloService eloService) {
|
public Enter2vs2View(KickerEloService eloService) {
|
||||||
H2 subheading = new H2("2 vs 2 Ergebnis");
|
H2 subheading = new H2("2 vs 2 Ergebnis");
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
|||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
||||||
|
|
||||||
@Route("graph1vs1")
|
@Route("app/graph1vs1")
|
||||||
public class Graph1vs1View extends VerticalLayout {
|
public class Graph1vs1View extends VerticalLayout {
|
||||||
|
|
||||||
ApexCharts chart1vs1;
|
ApexCharts chart1vs1;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import com.vaadin.flow.component.orderedlayout.VerticalLayout;
|
|||||||
import com.vaadin.flow.router.Route;
|
import com.vaadin.flow.router.Route;
|
||||||
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
import org.kickerelo.kickerelo.repository.SpielerRepository;
|
||||||
|
|
||||||
@Route("graph2vs2")
|
@Route("app/graph2vs2")
|
||||||
public class Graph2vs2View extends VerticalLayout {
|
public class Graph2vs2View extends VerticalLayout {
|
||||||
ApexCharts chart2vs2;
|
ApexCharts chart2vs2;
|
||||||
public Graph2vs2View(SpielerRepository repo) {
|
public Graph2vs2View(SpielerRepository repo) {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import org.kickerelo.kickerelo.repository.Ergebnis1vs1Repository;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Route("history1vs1")
|
@Route("app/history1vs1")
|
||||||
public class History1vs1View extends VerticalLayout {
|
public class History1vs1View extends VerticalLayout {
|
||||||
List<Ergebnis1vs1> res;
|
List<Ergebnis1vs1> res;
|
||||||
public History1vs1View(Ergebnis1vs1Repository repo) {
|
public History1vs1View(Ergebnis1vs1Repository repo) {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import org.kickerelo.kickerelo.repository.Ergebnis2vs2Repository;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Route("history2vs2")
|
@Route("app/history2vs2")
|
||||||
public class History2vs2View extends VerticalLayout {
|
public class History2vs2View extends VerticalLayout {
|
||||||
public History2vs2View(Ergebnis2vs2Repository repo) {
|
public History2vs2View(Ergebnis2vs2Repository repo) {
|
||||||
setSizeFull();
|
setSizeFull();
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import org.kickerelo.kickerelo.service.KickerEloService;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Route("")
|
@Route("app")
|
||||||
public class PlayerListView extends VerticalLayout {
|
public class PlayerListView extends VerticalLayout {
|
||||||
public PlayerListView(KickerEloService eloService) {
|
public PlayerListView(KickerEloService eloService) {
|
||||||
setSizeFull();
|
setSizeFull();
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import org.kickerelo.kickerelo.service.KickerEloService;
|
|||||||
import org.kickerelo.kickerelo.service.Stat2vs2Service;
|
import org.kickerelo.kickerelo.service.Stat2vs2Service;
|
||||||
import org.kickerelo.kickerelo.util.Position;
|
import org.kickerelo.kickerelo.util.Position;
|
||||||
|
|
||||||
@Route("stat2vs2")
|
@Route("app/stat2vs2")
|
||||||
public class Stat2vs2View extends VerticalLayout {
|
public class Stat2vs2View extends VerticalLayout {
|
||||||
Stat2vs2Service stat2vs2Service;
|
Stat2vs2Service stat2vs2Service;
|
||||||
KickerEloService kickerEloService;
|
KickerEloService kickerEloService;
|
||||||
|
|||||||
@@ -11,9 +11,10 @@ spring.jpa.show-sql=false
|
|||||||
spring.jpa.open-in-view=false
|
spring.jpa.open-in-view=false
|
||||||
|
|
||||||
# == OIDC Configuration ==
|
# == OIDC Configuration ==
|
||||||
spring.security.oauth2.client.registration.oidc.client-id=client-id
|
spring.security.oauth2.client.registration.oidc.client-id=${OIDC_CLIENT_ID}
|
||||||
spring.security.oauth2.client.registration.oidc.client-secret=client-secret
|
spring.security.oauth2.client.registration.oidc.client-secret=${OIDC_CLIENT_SECRET}
|
||||||
spring.security.oauth2.client.registration.oidc.scope=openid,profile,email
|
spring.security.oauth2.client.registration.oidc.scope=openid,profile,email
|
||||||
spring.security.oauth2.client.registration.oidc.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
|
spring.security.oauth2.client.registration.oidc.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
|
||||||
|
spring.security.oauth2.client.provider.oidc.issuer-uri=${OIDC_ISSUER_URI}
|
||||||
|
|
||||||
spring.security.oauth2.client.provider.oidc.issuer-uri=https://auth.fs.cs.uni-frankfurt.de/application/o/oidc/
|
vaadin.urlMapping=/*
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
server.port=${PORT:8080}
|
server.port=${PORT:8080}
|
||||||
logging.level.org.atmosphere = warn
|
logging.level.org.atmosphere = warn
|
||||||
|
logging.level.org.springframework.security=DEBUG
|
||||||
spring.mustache.check-template-location = false
|
spring.mustache.check-template-location = false
|
||||||
|
|
||||||
spring.datasource.url=jdbc:h2:file:./data
|
spring.datasource.url=jdbc:h2:file:./data
|
||||||
@@ -14,5 +15,6 @@ spring.security.oauth2.client.registration.oidc.client-id=${OIDC_CLIENT_ID}
|
|||||||
spring.security.oauth2.client.registration.oidc.client-secret=${OIDC_CLIENT_SECRET}
|
spring.security.oauth2.client.registration.oidc.client-secret=${OIDC_CLIENT_SECRET}
|
||||||
spring.security.oauth2.client.registration.oidc.scope=openid,profile,email
|
spring.security.oauth2.client.registration.oidc.scope=openid,profile,email
|
||||||
spring.security.oauth2.client.registration.oidc.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
|
spring.security.oauth2.client.registration.oidc.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
|
||||||
|
|
||||||
spring.security.oauth2.client.provider.oidc.issuer-uri=${OIDC_ISSUER_URI}
|
spring.security.oauth2.client.provider.oidc.issuer-uri=${OIDC_ISSUER_URI}
|
||||||
|
|
||||||
|
vaadin.urlMapping=/app/*
|
||||||
|
|||||||
Reference in New Issue
Block a user