Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add_idp_keycloak: Handle Keycloak IDP #102

Merged
merged 1 commit into from
Jan 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 52 additions & 38 deletions mvc/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,6 @@
<name>karnak services and UI</name>
<packaging>jar</packaging>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>${vaadin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>javax.cache</groupId>
Expand Down Expand Up @@ -203,36 +191,62 @@
<artifactId>jul-to-slf4j</artifactId>
</dependency>

<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>

<!-- Tests -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
</dependency>
<!-- KeyCloack -->
<dependency>
<artifactId>keycloak-spring-boot-starter</artifactId>
<groupId>org.keycloak</groupId>
<version>11.0.3</version>
</dependency>

<!-- Tests -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springframework.version}</version>
<scope>test</scope>
</dependency>
<!-- Tests -->
<dependency>
<groupId>org.codehaus.janino</groupId>
<artifactId>janino</artifactId>
</dependency>

<!-- Tests -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springframework.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>${vaadin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<artifactId>keycloak-adapter-bom</artifactId>
<groupId>org.keycloak.bom</groupId>
<scope>import</scope>
<type>pom</type>
<version>11.0.3</version>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>${project.build.directory}/native-lib</directory>
</resource>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>${project.build.directory}/native-lib</directory>
</resource>
</resources>
<plugins>
<plugin>
Expand Down
3 changes: 3 additions & 0 deletions mvc/src/main/java/org/karnak/StartApplication.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import com.vaadin.flow.spring.annotation.EnableVaadin;
import org.karnak.data.AppConfig;
import org.keycloak.adapters.springsecurity.KeycloakSecurityComponents;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -11,12 +12,14 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication(exclude = ErrorMvcAutoConfiguration.class)
@EntityScan("org.karnak.data")
@EnableJpaRepositories("org.karnak.data")
@EnableVaadin(value = "org.karnak")
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class, basePackages = "org.karnak")
public class StartApplication implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(StartApplication.class);

Expand Down
2 changes: 1 addition & 1 deletion mvc/src/main/java/org/karnak/ui/MainLayout.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
@CssImport(value = "./styles/shared-styles.css")
@Theme(value = Lumo.class)
@Route(value = "mainLayout")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
@SuppressWarnings("serial")
public class MainLayout extends FlexLayout implements RouterLayout {
private final Menu menu;
Expand Down
2 changes: 1 addition & 1 deletion mvc/src/main/java/org/karnak/ui/about/AboutView.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

@Route(value = "about", layout = MainLayout.class)
@PageTitle("KARNAK - About")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
@SuppressWarnings("serial")
public class AboutView extends VerticalLayout {
public static final String VIEW_NAME = "About";
Expand Down
13 changes: 6 additions & 7 deletions mvc/src/main/java/org/karnak/ui/dicom/DicomMainView.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,20 @@
import com.vaadin.flow.component.tabs.Tabs;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import org.karnak.ui.MainLayout;
import org.karnak.ui.dicom.echo.DicomEchoView;
import org.karnak.ui.dicom.monitor.MonitorView;
import org.karnak.ui.dicom.mwl.DicomWorkListView;
import org.springframework.security.access.annotation.Secured;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.karnak.ui.MainLayout;
import org.karnak.ui.dicom.echo.DicomEchoView;
import org.karnak.ui.dicom.monitor.MonitorView;
import org.karnak.ui.dicom.mwl.DicomWorkListView;
import org.springframework.security.access.annotation.Secured;

@Route(value = "dicom", layout = MainLayout.class)
@PageTitle("KARNAK - DICOM Tools")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
public class DicomMainView extends VerticalLayout {
public static final String VIEW_NAME = "DICOM Tools";
private static final long serialVersionUID = 1L;
Expand Down
2 changes: 1 addition & 1 deletion mvc/src/main/java/org/karnak/ui/extid/ExternalIDView.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
@Route(value = "extid", layout = MainLayout.class)
@PageTitle("KARNAK - External ID")
@Tag("extid-view")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
@SuppressWarnings("serial")
public class ExternalIDView extends HorizontalLayout {
public static final String VIEW_NAME = "External pseudonym";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package org.karnak.ui.forwardnode;

import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.router.*;
import com.vaadin.flow.router.BeforeEvent;
import com.vaadin.flow.router.HasUrlParameter;
import com.vaadin.flow.router.OptionalParameter;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.router.RouteAlias;
import org.karnak.data.gateway.ForwardNode;
import org.karnak.ui.MainLayout;
import org.karnak.ui.api.ForwardNodeAPI;
Expand All @@ -13,7 +18,7 @@
@Route(value = "forwardnode", layout = MainLayout.class)
@RouteAlias(value = "", layout = MainLayout.class)
@PageTitle("KARNAK - Forward node")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
public class ForwardNodeView extends HorizontalLayout implements HasUrlParameter<String> {
public static final String VIEW_NAME = "Gateway";
private final ForwardNodeAPI forwardNodeAPI;
Expand Down
2 changes: 1 addition & 1 deletion mvc/src/main/java/org/karnak/ui/help/HelpView.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
@Route(value = "help", layout = MainLayout.class)
@PageTitle("KARNAK - Help")
@Tag("help-view")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
public class HelpView extends VerticalLayout {
public static final String VIEW_NAME = "Help";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@Route(value = "mainzelliste", layout = MainLayout.class)
@PageTitle("KARNAK - Mainzelliste")
@Tag("mainzelliste-view")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
@SuppressWarnings("serial")
public class MainzellisteView extends HorizontalLayout {
public static final String VIEW_NAME = "Mainzelliste pseudonym";
Expand Down
11 changes: 5 additions & 6 deletions mvc/src/main/java/org/karnak/ui/profile/ProfileView.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,22 @@
import com.vaadin.flow.data.selection.SingleSelect;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.function.Predicate;
import org.karnak.data.profile.Profile;
import org.karnak.profilepipe.profilebody.ProfilePipeBody;
import org.karnak.ui.MainLayout;
import org.springframework.security.access.annotation.Secured;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.access.annotation.Secured;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.constructor.Constructor;
import org.yaml.snakeyaml.error.YAMLException;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.function.Predicate;

@Route(value = "profile", layout = MainLayout.class)
@PageTitle("KARNAK - Profiles")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
@SuppressWarnings("serial")
public class ProfileView extends HorizontalLayout {
private static final Logger LOGGER = LoggerFactory.getLogger(ProfileView.class);
Expand Down
8 changes: 6 additions & 2 deletions mvc/src/main/java/org/karnak/ui/project/MainViewProjects.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.router.*;
import com.vaadin.flow.router.BeforeEvent;
import com.vaadin.flow.router.HasUrlParameter;
import com.vaadin.flow.router.OptionalParameter;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import org.karnak.data.gateway.Project;
import org.karnak.profilepipe.utils.HMAC;
import org.karnak.ui.MainLayout;
Expand All @@ -14,7 +18,7 @@

@Route(value = "projects", layout = MainLayout.class)
@PageTitle("KARNAK - Projects")
@Secured({"ROLE_ADMIN"})
@Secured({"ADMIN"})
public class MainViewProjects extends HorizontalLayout implements HasUrlParameter<String> {
public static final String VIEW_NAME = "Projects";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,41 @@
import com.vaadin.flow.router.BeforeEnterEvent;
import com.vaadin.flow.server.ServiceInitEvent;
import com.vaadin.flow.server.VaadinServiceInitListener;
import org.karnak.ui.authentication.LoginScreen;
import java.util.Objects;
import org.springframework.stereotype.Component;

@Component
public class ConfigureUIServiceInitListener implements VaadinServiceInitListener {

/**
* Listen for the initialization of the UI (the internal root component in Vaadin)
* and then add a listener before every view transition
*
* @param event ServiceInitEvent
*/
@Override
public void serviceInit(ServiceInitEvent event) {
event.getSource().addUIInitListener(uiEvent -> {
final UI ui = uiEvent.getUI();
ui.addBeforeEnterListener(this::beforeEnter);
});
}
/**
* Listen for the initialization of the UI (the internal root component in Vaadin) and then add a
* listener before every view transition
*
* @param event ServiceInitEvent
*/
@Override
public void serviceInit(ServiceInitEvent event) {
event
.getSource()
.addUIInitListener(
uiEvent -> {
final UI ui = uiEvent.getUI();
ui.addBeforeEnterListener(this::beforeEnter);
});
}

/**
* Reroute all requests to the login, if the user does not have the role to see the view
*
* @param event BeforeEnterEvent
*/
private void beforeEnter(BeforeEnterEvent event) {
if (!SecurityUtils.isAccessGranted(event.getNavigationTarget())) {
event.rerouteTo(LoginScreen.class);
}
}
/**
* Reroute all requests to the login, if the user does not have the role to see the view
*
* @param event BeforeEnterEvent
*/
private void beforeEnter(BeforeEnterEvent event) {
boolean isLoginScreen =
Objects.equals(
event.getNavigationTarget().getName(), "org.karnak.ui.authentication.LoginScreen");

}
if (!SecurityUtils.isAccessGranted(event.getNavigationTarget()) && !isLoginScreen) {
SecurityUtils.signOut();
}
}
}
Loading