diff --git a/docker/config/application.tmpl b/docker/config/application.tmpl index d685d2f2f6e3d11c509d72e774789fa2532649b4..257bfa0871747ff23d288c5cdf53be4086ce2827 100644 --- a/docker/config/application.tmpl +++ b/docker/config/application.tmpl @@ -1,6 +1,6 @@ # Configuration template for the portal running inside a Docker container -# See http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +### DATABASE CONFIGURATION ### spring: portal-datasource: url: {{ default .Env.PORTAL_DB_URL "jdbc:postgresql://88.197.53.106:5432/portal" }} @@ -8,7 +8,6 @@ spring: username: {{ default .Env.PORTAL_DB_USER "postgres" }} password: {{ .Env.PORTAL_DB_PASSWORD }} driver-class-name: org.postgresql.Driver - data: jpa: repositories: @@ -18,12 +17,7 @@ spring: dialect: org.hibernate.dialect.PostgreSQL9Dialect ddl-auto: validate -# WEB FRONTEND -frontend: - loginUrl: {{ default .Env.FRONTEND_LOGIN_URL "http://frontend/services/login/hbp" }} - redirectAfterLoginUrl: {{ default .Env.FRONTEND_AFTER_LOGIN_URL "http://frontend/" }} - redirectAfterLogoutUrl: {{ default .Env.FRONTEND_AFTER_LOGOUT_URL "http://frontend/services/login/hbp" }} - +### LOG LEVELS ### logging: level: root: {{ default .Env.LOG_LEVEL_FRAMEWORK "ERROR" }} @@ -31,16 +25,14 @@ logging: eu: hbp: {{ default .Env.LOG_LEVEL "INFO" }} -# EMBEDDED SERVER CONFIGURATION +### EMBEDDED SERVER CONFIGURATION ### server: servlet: - contextPath: {{ default .Env.CONTEXT_PATH "/services" }} + contextPath: "/services" port: 8080 - use-forward-headers: true - session: - timeout: {{ default .Env.SESSION_TIMEOUT "2592000" }} + forward-headers-strategy: native -# ENDPOINTS +### ENDPOINTS ### endpoints: enabled: true health: @@ -48,7 +40,7 @@ endpoints: endpoint: /health sensitive: false -# External Services +### EXTERNAL SERVICES ### services: exareme: queryExaremeUrl: {{ default .Env.EXAREME_URL "http://localhost:9090" }}/mining/query @@ -61,11 +53,11 @@ services: galaxyUsername: {{ default .Env.GALAXY_USERNAME "admin" }} galaxyPassword: {{ default .Env.GALAXY_PASSWORD "password" }} -# Authentication +### Authentication ### authentication: enabled: {{ default .Env.AUTHENTICATION "1" }} -# Keycloak +### Keycloak ### keycloak: enabled: true auth-server-url: {{ .Env.KEYCLOAK_AUTH_URL }} @@ -75,14 +67,8 @@ keycloak: credentials: secret: {{ .Env.CLIENT_SECRET }} principal-attribute: "preferred_username" -# cors: true -# cors-max-age: 3600 -# cors-allowed-methods: "GET, POST, PUT, PATCH, OPTIONS, DELETE" -# cors-allowed-headers: "*" -# cors-exposed-headers: "*" - - # logoutUrl: {{ .Env.LOGOUT_URL }} +### EXTERNAL FILES ### # Files are imported when building the docker image files: pathologies_json: "file:/opt/portal/api/pathologies.json" diff --git a/src/main/java/eu/hbp/mip/configuration/CacheConfiguration.java b/src/main/java/eu/hbp/mip/configuration/CacheConfiguration.java deleted file mode 100644 index b7300fc257fcef4afd29421d8ccef64aeb0a11dd..0000000000000000000000000000000000000000 --- a/src/main/java/eu/hbp/mip/configuration/CacheConfiguration.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.hbp.mip.configuration; - -import org.springframework.cache.annotation.EnableCaching; -import org.springframework.context.annotation.Configuration; - -/** - * Created by mirco on 07.11.16. - */ - -@Configuration -@EnableCaching -public class CacheConfiguration { -} diff --git a/src/main/java/eu/hbp/mip/controllers/SecurityApi.java b/src/main/java/eu/hbp/mip/configuration/GalaxyAuthentication.java similarity index 74% rename from src/main/java/eu/hbp/mip/controllers/SecurityApi.java rename to src/main/java/eu/hbp/mip/configuration/GalaxyAuthentication.java index 9ee70b0bee545d5ebb0ca71001baa18477968c67..7910e809f48118daea416f71fb2b2596aa25430a 100644 --- a/src/main/java/eu/hbp/mip/controllers/SecurityApi.java +++ b/src/main/java/eu/hbp/mip/configuration/GalaxyAuthentication.java @@ -1,4 +1,4 @@ -package eu.hbp.mip.controllers; +package eu.hbp.mip.configuration; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -21,24 +21,11 @@ import java.io.IOException; import java.util.Base64; @RestController -public class SecurityApi { - - private static final Gson gson = new Gson(); +public class GalaxyAuthentication { @Autowired private ActiveUserService activeUserService; - @Autowired - private SecurityConfiguration securityConfiguration; - - // TODO Fix no authentication instance - @RequestMapping(path = "/login/hbp", method = RequestMethod.GET) - @ConditionalOnExpression("${authentication.enabled:0}") - public void noLogin(HttpServletResponse httpServletResponse) throws IOException { - Logging.LogUserAction(activeUserService.getActiveUser().getUsername(), "(GET) /user/login/hbp", "Unauthorized login."); - httpServletResponse.sendRedirect(securityConfiguration.getFrontendRedirectAfterLogin()); - } - @Value("#{'${services.galaxy.galaxyUsername:admin}'}") private String galaxyUsername; @@ -63,6 +50,6 @@ public class SecurityApi { object.addProperty("context", galaxyContext); Logging.LogUserAction(activeUserService.getActiveUser().getUsername(), "(GET) /user/galaxy", "Successfully Loaded galaxy information."); - return ResponseEntity.ok(gson.toJson(object)); + return ResponseEntity.ok(new Gson().toJson(object)); } } diff --git a/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java b/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java index 8ebf2c376b89338be738c98d94baf18a56cf7e11..796f900a59d4f895c22f4f4bb44e66160992a63a 100644 --- a/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java +++ b/src/main/java/eu/hbp/mip/configuration/SecurityConfiguration.java @@ -1,14 +1,10 @@ package eu.hbp.mip.configuration; -import eu.hbp.mip.configuration.SecurityUtils.CORSFilter; import org.keycloak.adapters.KeycloakConfigResolver; import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver; import org.keycloak.adapters.springsecurity.KeycloakConfiguration; import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; -import org.keycloak.adapters.springsecurity.authentication.KeycloakLogoutHandler; import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; @@ -16,67 +12,54 @@ import org.springframework.security.config.annotation.authentication.builders.Au import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper; import org.springframework.security.core.session.SessionRegistryImpl; -import org.springframework.security.web.access.channel.ChannelProcessingFilter; import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy; import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy; -import org.springframework.security.web.csrf.CsrfToken; -import org.springframework.security.web.csrf.CsrfTokenRepository; -import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.CorsConfigurationSource; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.OncePerRequestFilter; -import org.springframework.web.util.WebUtils; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; -import javax.servlet.FilterChain; import javax.servlet.ServletException; -import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -// Reference for OAuth2 login: https://spring.io/guides/tutorials/spring-boot-oauth2/ -// also http://cscarioni.blogspot.ch/2013/04/pro-spring-security-and-oauth-2.html -// Security with Keycloak: https://www.thomasvitale.com/keycloak-authentication-flow-sso-client/ +// Keycloak security with keycloak-spring-boot-starter +@Controller @KeycloakConfiguration public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter { - private static final Logger LOGGER = LoggerFactory.getLogger(SecurityConfiguration.class); - - /** - * Enable HBP collab authentication (1) or disable it (0). Default is 1 - */ @Value("#{'${authentication.enabled}'}") private boolean authenticationEnabled; - /** - * Absolute URL to redirect to when login is required - */ - @Value("#{'${frontend.loginUrl}'}") - private String loginUrl; - - /** - * Absolute URL to redirect to after successful login - */ - @Value("#{'${frontend.redirectAfterLoginUrl}'}") - private String frontendRedirectAfterLogin; + // Redirect to login page url + private static final String logoutRedirectURL = "/sso/login"; - /** - * Absolute URL to redirect to after successful logout - */ - @Value("#{'${frontend.redirectAfterLogoutUrl}'}") - private String redirectAfterLogoutUrl; + @Override + protected void configure(HttpSecurity http) throws Exception { + super.configure(http); - public boolean getAuthenticationEnabled() { - return authenticationEnabled; + if (authenticationEnabled) { + http.authorizeRequests() + .antMatchers( + "/sso/login", "/webjars/**", + "/v2/api-docs", "/swagger-ui/**", "/swagger-resources/**" // Swagger URLs + ).permitAll() + .antMatchers("/galaxy*", "/galaxy/*").hasRole("DATA MANAGER") + .anyRequest().hasRole("RESEARCHER"); + } else { + http.antMatcher("/**") + .authorizeRequests() + .antMatchers("/**").permitAll() + .and().csrf().disable(); + } } - public String getFrontendRedirectAfterLogin() { - return frontendRedirectAfterLogin; + @Autowired + private HttpServletRequest request; + + @GetMapping(value = "/logout") + public String logout() throws ServletException { + request.logout(); + return "redirect:" + logoutRedirectURL; } @Bean @@ -99,215 +82,4 @@ public class SecurityConfiguration extends KeycloakWebSecurityConfigurerAdapter auth.authenticationProvider(keycloakAuthenticationProvider); } - @Override - protected KeycloakLogoutHandler keycloakLogoutHandler() throws Exception { - return super.keycloakLogoutHandler(); - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - super.configure(http); - //disableCertificateValidation(); // TODO needed? - - // TODO Is that needed for development? On Galaxy? -// http.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class); -// http.cors(); - - if (authenticationEnabled) { - http.antMatcher("/**") - .authorizeRequests() - .antMatchers("/**").permitAll() - .and().csrf().disable(); -// .antMatchers( -// "/login**", "/health/**", "/info/**", "/metrics/**", -// "/trace/**", "/frontend/**", "/webjars/**", "/v2/api-docs", -// "/swagger-ui.html", "/swagger-resources/**" -// ).permitAll() -// .antMatchers("/galaxy*", "/galaxy/*").hasRole("DATA MANAGER") -// .anyRequest().hasRole("RESEARCHER") - // .and().exceptionHandling().authenticationEntryPoint(new CustomLoginUrlAuthenticationEntryPoint(loginUrl)) - // .accessDeniedHandler(new CustomAccessDeniedHandler()) -// .and().csrf().ignoringAntMatchers("/logout").csrfTokenRepository(csrfTokenRepository()) -// .and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class).csrf(); -// .and().logout().logoutSuccessUrl("/logout"); -// -// -// // TODO .and().logout().addLogoutHandler(authLogoutHandler()).logoutSuccessUrl(redirectAfterLogoutUrl) -// .and().logout().permitAll() - // TODO ?? .addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); - } else { - http.antMatcher("/**") - .authorizeRequests() - .antMatchers("/**").permitAll() - .and().csrf().disable(); - } - } - - -// @Bean -// public FilterRegistrationBean corsFilter() { -// UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); -// CorsConfiguration config = new CorsConfiguration(); -// config.setAllowCredentials(true); -// config.addAllowedOrigin("*"); -// config.addAllowedHeader("*"); -// config.addAllowedMethod("*"); -// source.registerCorsConfiguration("/**", config); -// -// FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); -// bean.setOrder(-100); -// return bean; -// } - -// private Filter ssoFilter() { -// OAuth2ClientAuthenticationProcessingFilter hbpFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/hbp"); -// OAuth2RestTemplate hbpTemplate = new OAuth2RestTemplate(hbp(), oauth2ClientContext); -// hbpFilter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler(frontendRedirectAfterLogin)); -// hbpFilter.setRestTemplate(hbpTemplate); -// hbpFilter.setTokenServices(new activeUserServiceTokenServices(hbpResource().getactiveUserServiceUri(), hbp().getClientId())); -// return hbpFilter; -// } - -// @Bean -// public FilterRegistrationBean oauth2ClientFilterRegistration( -// OAuth2ClientContextFilter filter) { -// FilterRegistrationBean registration = new FilterRegistrationBean(); -// registration.setFilter(filter); -// registration.setOrder(-100); -// return registration; -// } - -// @Bean(name = "hbp") -// @ConfigurationProperties("hbp.client") -// public BaseOAuth2ProtectedResourceDetails hbp() { -// return new AuthorizationCodeResourceDetails(); -// } -// -// @Bean(name = "hbpResource") -// @ConfigurationProperties("hbp.resource") -// public ResourceServerProperties hbpResource() { -// return new ResourceServerProperties(); -// } - - - private OncePerRequestFilter csrfHeaderFilter() { - return new OncePerRequestFilter() { - @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, - FilterChain filterChain) throws ServletException, IOException { - CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); - if (csrf != null) { - Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN"); - String token = csrf.getToken(); - if (cookie == null || token != null && !token.equals(cookie.getValue())) { - cookie = new Cookie("XSRF-TOKEN", token); - cookie.setPath("/"); - response.addCookie(cookie); - } - } - filterChain.doFilter(request, response); - } - }; - } - - private CsrfTokenRepository csrfTokenRepository() { - HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); - repository.setHeaderName("X-XSRF-TOKEN"); - return repository; - } - -// @Bean -// public AuthoritiesExtractor keycloakAuthoritiesExtractor() { -// return new KeycloakAuthoritiesExtractor(); -// } -// -// -// public class KeycloakAuthoritiesExtractor -// implements AuthoritiesExtractor { -// -// @Override -// public List<GrantedAuthority> extractAuthorities -// (Map<String, Object> map) { -// return AuthorityUtils -// .commaSeparatedStringToAuthorityList(asAuthorities(map)); -// } -// -// private String asAuthorities(Map<String, Object> map) { -// List<String> authorities = new ArrayList<>(); -//// authorities.add("BAELDUNG_USER"); -// List<LinkedHashMap<String, String>> authz; -// authz = (List<LinkedHashMap<String, String>>) map.get("authorities"); -// for (LinkedHashMap<String, String> entry : authz) { -// authorities.add(entry.get("authority")); -// } -// return String.join(",", authorities); -// } -// } - - -// private LogoutHandler authLogoutHandler() { -// return (request, response, authentication) -> { -// logout(); -// }; -// } - - -// public void logout() { -// // TODO Try removing -// -// RestTemplate restTemplate = new RestTemplate(); -// MultiValueMap<String, String> formParams = new LinkedMultiValueMap<>(); -// formParams.add("client_id", hbp().getClientId()); -// formParams.add("client_secret", hbp().getClientSecret()); -// formParams.add("refresh_token", this.oauth2ClientContext.getAccessToken().getRefreshToken().getValue()); -// -// HttpHeaders httpHeaders = new HttpHeaders(); -// httpHeaders.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE); -// RequestEntity<MultiValueMap<String, String>> requestEntity = -// new RequestEntity<>(formParams, httpHeaders, HttpMethod.POST, -// URI.create(logoutUrl)); -// restTemplate.exchange(requestEntity, String.class); -// } - - // TODO needed? -// @Value("#{'${keycloak.auth-server-url}'}") -// private String keycloakUrl; -// -// public void disableCertificateValidation() { -// -// //TODO Refactor logging -// -// LOGGER.info("disabling certificate validation host : " + keycloakUrl); -// -// // Create a trust manager that does not validate certificate chains -// TrustManager[] trustAllCerts = new TrustManager[]{ -// new X509TrustManager() { -// public X509Certificate[] getAcceptedIssuers() { -// return new X509Certificate[0]; -// } -// -// public void checkClientTrusted(X509Certificate[] certs, String authType) { -// } -// -// public void checkServerTrusted(X509Certificate[] certs, String authType) { -// } -// }}; -// -// -// // Ignore differences between given hostname and certificate hostname -// HostnameVerifier hv = -// (hostname, session) -> hostname.equals(keycloakUrl) && session.getPeerHost().equals(keycloakUrl); -// -// // Install the all-trusting trust manager -// try { -// SSLContext sc = SSLContext.getInstance("SSL"); -// sc.init(null, trustAllCerts, new SecureRandom()); -// HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); -// HttpsURLConnection.setDefaultHostnameVerifier(hv); -// } catch (Exception e) { -// // TODO add log message -// } -// -// } - } diff --git a/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CORSFilter.java b/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CORSFilter.java deleted file mode 100644 index b7d3f7733dfb1703a90f04bc2364d39ca7db241b..0000000000000000000000000000000000000000 --- a/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CORSFilter.java +++ /dev/null @@ -1,23 +0,0 @@ -package eu.hbp.mip.configuration.SecurityUtils; - -import javax.servlet.*; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -/** - * Created by mirco on 12.02.16. - */ -public class CORSFilter implements Filter { - // TODO needed? - - @Override - public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { - HttpServletResponse response = (HttpServletResponse) res; - response.setHeader("Access-Control-Allow-Origin", "*"); - response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); - response.setHeader("Access-Control-Max-Age", "3600"); - response.setHeader("Access-Control-Allow-Headers", "*"); - response.setHeader("Access-Control-Request-Headers", "*"); - chain.doFilter(req, res); - } -} diff --git a/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CustomAccessDeniedHandler.java b/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CustomAccessDeniedHandler.java deleted file mode 100644 index 552abd29f9487bfb2c991937094e5796f7587dd7..0000000000000000000000000000000000000000 --- a/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CustomAccessDeniedHandler.java +++ /dev/null @@ -1,32 +0,0 @@ -package eu.hbp.mip.configuration.SecurityUtils; - -import org.codehaus.jettison.json.JSONException; -import org.codehaus.jettison.json.JSONObject; -import org.springframework.security.access.AccessDeniedException; -import org.springframework.security.web.access.AccessDeniedHandler; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.sql.Timestamp; - -public class CustomAccessDeniedHandler implements AccessDeniedHandler { - @Override - public void handle(HttpServletRequest request, HttpServletResponse response, - AccessDeniedException accessDeniedException) throws IOException { - response.setContentType("application/json;charset=UTF-8"); - response.setStatus(403); - try { - response.getWriter().write(new JSONObject() - .put("timestamp", new Timestamp(System.currentTimeMillis())) - .put("status", 403) - .put("error", "Forbidden") - .put("message", "Access Denied. Please contact the system administrator to request access.") - .put("path", request.getServletPath()) - .toString()); - } catch (JSONException e) { - response.getWriter().write(""); - e.printStackTrace(); - } - } -} diff --git a/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CustomLoginUrlAuthenticationEntryPoint.java b/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CustomLoginUrlAuthenticationEntryPoint.java deleted file mode 100644 index 068ca591b17628dbfb97ed3ac0e3eb00430e7414..0000000000000000000000000000000000000000 --- a/src/main/java/eu/hbp/mip/configuration/SecurityUtils/CustomLoginUrlAuthenticationEntryPoint.java +++ /dev/null @@ -1,20 +0,0 @@ -package eu.hbp.mip.configuration.SecurityUtils; - -import org.springframework.security.core.AuthenticationException; -import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -public class CustomLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint { - - public CustomLoginUrlAuthenticationEntryPoint(String url) { - super(url); - } - - @Override - public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED); - } -} diff --git a/src/main/java/eu/hbp/mip/configuration/WebConfiguration.java b/src/main/java/eu/hbp/mip/configuration/WebConfiguration.java index 72bcad78905f685bc15b11ca493f255db577f071..50fbe43aeb71ed201651aaab2ac630bf21e1b7f9 100644 --- a/src/main/java/eu/hbp/mip/configuration/WebConfiguration.java +++ b/src/main/java/eu/hbp/mip/configuration/WebConfiguration.java @@ -18,11 +18,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2; @EnableSwagger2 public class WebConfiguration { -// @Bean -// public String[] swaggerUiConfig() { -// return UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS; -// } - @Bean public Docket swaggerDocumentation() { return new Docket(DocumentationType.SWAGGER_2) diff --git a/src/main/java/eu/hbp/mip/controllers/UsersApi.java b/src/main/java/eu/hbp/mip/controllers/UsersApi.java index 1c60aba1e141697fa506d3a113f2ead0ba6996df..c8b1193f812144aec66a31de8ca541c93ed2cd07 100644 --- a/src/main/java/eu/hbp/mip/controllers/UsersApi.java +++ b/src/main/java/eu/hbp/mip/controllers/UsersApi.java @@ -36,7 +36,7 @@ public class UsersApi { UserDAO activeUser = activeUserService.getActiveUser(); - // Add the active user to a cookie + // Add the active user object to a cookie try { // TODO needed? Ask Manuel ObjectMapper mapper = new ObjectMapper(); @@ -53,7 +53,6 @@ public class UsersApi { return ResponseEntity.ok(activeUserService.getActiveUser()); } - // TODO Kostas, why not working? @ApiOperation(value = "The active user agrees to the NDA", response = UserDAO.class) @RequestMapping(value = "/agreeNDA", method = RequestMethod.POST) public ResponseEntity<UserDAO> activeUserServiceAgreesToNDA(@RequestBody(required = false) UserDAO userDAO) { diff --git a/src/main/java/eu/hbp/mip/services/ActiveUserService.java b/src/main/java/eu/hbp/mip/services/ActiveUserService.java index d925ce3f50bc4cb83b533c25253771a5de27306f..3d881537315d5635f815ad8894c1e46e460068db 100644 --- a/src/main/java/eu/hbp/mip/services/ActiveUserService.java +++ b/src/main/java/eu/hbp/mip/services/ActiveUserService.java @@ -18,14 +18,14 @@ import javax.inject.Named; @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) public class ActiveUserService { - @Autowired - private UserRepository userRepository; - @Value("#{'${authentication.enabled}'}") private boolean authentication; private UserDAO user; + @Autowired + private UserRepository userRepository; + /** * Fetches the details of the active user. * If the user doesn't exist, it's created on the fly from the auth token. @@ -46,7 +46,7 @@ public class ActiveUserService { return user; } - // If authentication is ON + // If authentication is ON get user info from Token KeycloakPrincipal keycloakPrincipal = (KeycloakPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); IDToken idToken = keycloakPrincipal.getKeycloakSecurityContext().getIdToken(); diff --git a/src/main/java/eu/hbp/mip/utils/ClaimUtils.java b/src/main/java/eu/hbp/mip/utils/ClaimUtils.java index 5872819bc883efd98a453e363a46ad0a1cb537cd..cdbe41c9ef2bb110266d8d13d14cb809ed2a66fb 100644 --- a/src/main/java/eu/hbp/mip/utils/ClaimUtils.java +++ b/src/main/java/eu/hbp/mip/utils/ClaimUtils.java @@ -15,11 +15,11 @@ public class ClaimUtils { private static final Gson gson = new Gson(); public static String allDatasetsAllowedClaim() { - return "dataset_all"; + return "role_dataset_all"; } public static String getDatasetClaim(String datasetCode) { - return "dataset_" + datasetCode.toLowerCase(); + return "role_dataset_" + datasetCode.toLowerCase(); } public static boolean userHasDatasetsAuthorization(String username, Collection<? extends GrantedAuthority> authorities, diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 7ff94d0875d55fdf53d078aa7a41f9dd2f2588ba..30c82a447c62125c69a90159870e5a5fc8c6cc54 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,6 +1,6 @@ -# Configuration template for the portal running inside a Docker container +# Configuration for development purposes -# See http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html +### DATABASE CONFIGURATION ### spring: portal-datasource: url: "jdbc:postgresql://127.0.0.1:5433/portal" @@ -8,7 +8,6 @@ spring: username: "portal" password: "portalpwd" driver-class-name: org.postgresql.Driver - data: jpa: repositories: @@ -18,12 +17,7 @@ spring: dialect: org.hibernate.dialect.PostgreSQL9Dialect ddl-auto: validate -# WEB FRONTEND -frontend: - loginUrl: "http://127.0.0.1/services/login/hbp" - redirectAfterLoginUrl: "http://127.0.0.1/" - redirectAfterLogoutUrl: "http://127.0.0.1/services/login/hbp" - +### LOG LEVELS ### logging: level: root: "ERROR" @@ -31,14 +25,14 @@ logging: eu: hbp: "DEBUG" -# EMBEDDED SERVER CONFIGURATION +### EMBEDDED SERVER CONFIGURATION ### server: servlet: contextPath: "/services" port: 8080 forward-headers-strategy: native -# ENDPOINTS +### ENDPOINTS ### endpoints: enabled: true health: @@ -46,12 +40,11 @@ endpoints: endpoint: "/health" sensitive: false -# External Services +### EXTERNAL SERVICES ### services: exareme: queryExaremeUrl: "http://127.0.0.1:9090/mining/query" algorithmsUrl: "http://127.0.0.1:9090/mining/algorithms.json" - galaxy: galaxyUrl: "http://127.0.0.1:8090" galaxyContext: "nativeGalaxy/workflows/list" @@ -59,11 +52,11 @@ services: galaxyUsername: "admin" galaxyPassword: "password" -# Authentication +### Authentication ### authentication: enabled: true -# Keycloak +### Keycloak ### keycloak: enabled: true auth-server-url: "http://127.0.0.1/auth" @@ -74,8 +67,7 @@ keycloak: secret: "dae83a6b-c769-4186-8383-f0984c6edf05" principal-attribute: "preferred_username" - # logoutUrl: {{ .Env.LOGOUT_URL }} - +### EXTERNAL FILES ### # Files are loaded from the resources files: pathologies_json: "classPath:/pathologies.json"