diff --git a/pom.xml b/pom.xml index 65a7d11..362b933 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 eu.dnetlib - dnet45-parent + uoa-spring-boot-parent 1.0.0 login-service @@ -11,42 +11,11 @@ war login-service login-service - - 1.8 - - https://code-repo.d4science.org/MaDgIK/login-service - scm:git:gitea@code-repo.d4science.org:MaDgIK/login-service.git scm:git:gitea@code-repo.d4science.org:MaDgIK/login-service.git - login-service-1.0.0 + HEAD - - - - org.springframework.boot - spring-boot-dependencies - 1.5.8.RELEASE - pom - import - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.springframework.boot - spring-boot-starter-test - test - org.springframework.boot spring-boot-starter-security @@ -73,6 +42,18 @@ + + + io.springfox + springfox-swagger2 + ${swagger-version} + + + + io.springfox + springfox-swagger-ui + ${swagger-version} + @@ -87,6 +68,7 @@ spring-boot-maven-plugin eu.dnetlib.loginservice.LoginServiceApplication + true diff --git a/src/main/java/eu/dnetlib/loginservice/LoginServiceApplication.java b/src/main/java/eu/dnetlib/loginservice/LoginServiceApplication.java index 0d27afe..aeac5b7 100644 --- a/src/main/java/eu/dnetlib/loginservice/LoginServiceApplication.java +++ b/src/main/java/eu/dnetlib/loginservice/LoginServiceApplication.java @@ -1,5 +1,6 @@ package eu.dnetlib.loginservice; +import eu.dnetlib.loginservice.properties.APIProperties; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -12,7 +13,7 @@ import eu.dnetlib.loginservice.properties.Properties; @PropertySource("classpath:authentication.properties"), @PropertySource(value = "classpath:dnet-override.properties", ignoreResourceNotFound = true) }) -@EnableConfigurationProperties({Properties.class}) +@EnableConfigurationProperties({Properties.class, APIProperties.class}) public class LoginServiceApplication { public static void main(String[] args) { diff --git a/src/main/java/eu/dnetlib/loginservice/controllers/HealthController.java b/src/main/java/eu/dnetlib/loginservice/controllers/HealthController.java index 99d0448..1dacdc9 100644 --- a/src/main/java/eu/dnetlib/loginservice/controllers/HealthController.java +++ b/src/main/java/eu/dnetlib/loginservice/controllers/HealthController.java @@ -1,7 +1,8 @@ package eu.dnetlib.loginservice.controllers; import eu.dnetlib.loginservice.properties.Properties; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.RequestMapping; @@ -13,7 +14,7 @@ import java.util.Map; @RestController public class HealthController { - private final Logger log = Logger.getLogger(this.getClass()); + private final Logger log = LogManager.getLogger(this.getClass()); private final Properties properties; @Autowired @@ -32,14 +33,18 @@ public class HealthController { public Map checkEverything() { Map response = new HashMap<>(); response.put("authentication.domain", properties.getDomain()); + response.put("authentication.keycloak", properties.getKeycloak().toString()); response.put("authentication.redis.host", properties.getRedis().getHost()); + response.put("authentication.oidc.issuer", properties.getOidc().getIssuer()); + response.put("authentication.oidc.logout", properties.getOidc().getLogout()); + response.put("authentication.oidc.home", properties.getOidc().getHome()); + response.put("authentication.oidc.scope", properties.getOidc().getScope()); response.put("authentication.oidc.id", properties.getOidc().getId()); response.put("authentication.oidc.secret", properties.getOidc().getSecret()); - response.put("authentication.oidc.issuer", properties.getOidc().getIssuer()); - response.put("authentication.oidc.home", properties.getOidc().getHome()); - response.put("authentication.oidc.logout", properties.getOidc().getLogout()); - response.put("authentication.oidc.scope", properties.getOidc().getScope()); + response.put("authentication.session", properties.getSession()); + response.put("authentication.accessToken", properties.getAccessToken()); response.put("authentication.redirect", properties.getRedirect()); + response.put("authentication.authorities-mappe", properties.getAuthoritiesMapper()); return response; } } diff --git a/src/main/java/eu/dnetlib/loginservice/properties/APIProperties.java b/src/main/java/eu/dnetlib/loginservice/properties/APIProperties.java new file mode 100644 index 0000000..96e5256 --- /dev/null +++ b/src/main/java/eu/dnetlib/loginservice/properties/APIProperties.java @@ -0,0 +1,38 @@ +package eu.dnetlib.loginservice.properties; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties("api") +public class APIProperties { + + private String title; + private String description; + private String version; + + public APIProperties() { + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } +} diff --git a/src/main/java/eu/dnetlib/loginservice/security/RedisConfig.java b/src/main/java/eu/dnetlib/loginservice/security/RedisConfig.java index 20fe0a5..d75f09f 100644 --- a/src/main/java/eu/dnetlib/loginservice/security/RedisConfig.java +++ b/src/main/java/eu/dnetlib/loginservice/security/RedisConfig.java @@ -1,7 +1,8 @@ package eu.dnetlib.loginservice.security; import eu.dnetlib.loginservice.properties.Properties; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -16,7 +17,7 @@ public class RedisConfig { private final Properties properties; - private static final Logger logger = Logger.getLogger(RedisConfig.class); + private static final Logger logger = LogManager.getLogger(RedisConfig.class); @Autowired public RedisConfig(Properties properties) { diff --git a/src/main/java/eu/dnetlib/loginservice/security/SwaggerConfig.java b/src/main/java/eu/dnetlib/loginservice/security/SwaggerConfig.java new file mode 100644 index 0000000..bf0575f --- /dev/null +++ b/src/main/java/eu/dnetlib/loginservice/security/SwaggerConfig.java @@ -0,0 +1,68 @@ +package eu.dnetlib.loginservice.security; + +import eu.dnetlib.loginservice.properties.APIProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +/** + * Swagger configuration class + */ +@Configuration +@Profile({"swagger"}) +@EnableSwagger2 +public class SwaggerConfig extends WebMvcConfigurerAdapter { + + private final APIProperties apiProperties; + + @Autowired + public SwaggerConfig(APIProperties apiProperties) { + this.apiProperties = apiProperties; + } + + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("eu.dnetlib.loginservice.controllers")) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title(this.apiProperties.getTitle()) + .description(this.apiProperties.getDescription()) + .version(this.apiProperties.getVersion()) + .build(); + } + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addRedirectViewController("/v2/api-docs", "/v2/api-docs"); + registry.addRedirectViewController("/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui"); + registry.addRedirectViewController("/swagger-resources/configuration/security", "/swagger-resources/configuration/security"); + registry.addRedirectViewController("/swagger-resources", "/swagger-resources"); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/swagger-ui.html**").addResourceLocations("classpath:/META-INF/resources/swagger-ui.html"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + +} + diff --git a/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationFilter.java b/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationFilter.java index 5fd35fa..54b9330 100644 --- a/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationFilter.java +++ b/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationFilter.java @@ -2,7 +2,8 @@ package eu.dnetlib.loginservice.security.oidc; import eu.dnetlib.loginservice.properties.Properties; import eu.dnetlib.loginservice.utils.Redirect; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.mitre.openid.connect.client.OIDCAuthenticationFilter; import javax.servlet.http.HttpServletRequest; @@ -11,7 +12,7 @@ import java.io.IOException; public class OpenAIREAuthenticationFilter extends OIDCAuthenticationFilter { - private final static Logger logger = Logger.getLogger(OpenAIREAuthenticationSuccessHandler.class); + private final static Logger logger = LogManager.getLogger(OpenAIREAuthenticationSuccessHandler.class); private final Properties properties; public OpenAIREAuthenticationFilter(Properties properties) { diff --git a/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationSuccessHandler.java b/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationSuccessHandler.java index 4201ea1..f17f4c8 100644 --- a/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationSuccessHandler.java +++ b/src/main/java/eu/dnetlib/loginservice/security/oidc/OpenAIREAuthenticationSuccessHandler.java @@ -2,7 +2,8 @@ package eu.dnetlib.loginservice.security.oidc; import com.google.gson.JsonParser; import eu.dnetlib.loginservice.properties.Properties; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.mitre.openid.connect.model.OIDCAuthenticationToken; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; @@ -23,7 +24,7 @@ import java.util.regex.Pattern; @Configuration public class OpenAIREAuthenticationSuccessHandler implements AuthenticationSuccessHandler { - private static final Logger logger = Logger.getLogger(OpenAIREAuthenticationSuccessHandler.class); + private static final Logger logger = LogManager.getLogger(OpenAIREAuthenticationSuccessHandler.class); private final Properties properties; @Autowired diff --git a/src/main/java/eu/dnetlib/loginservice/utils/AuthoritiesMapper.java b/src/main/java/eu/dnetlib/loginservice/utils/AuthoritiesMapper.java index da9321e..5cce7e3 100644 --- a/src/main/java/eu/dnetlib/loginservice/utils/AuthoritiesMapper.java +++ b/src/main/java/eu/dnetlib/loginservice/utils/AuthoritiesMapper.java @@ -2,7 +2,8 @@ package eu.dnetlib.loginservice.utils; import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; @@ -13,7 +14,7 @@ import java.util.regex.Pattern; public class AuthoritiesMapper { - private static final Logger logger = Logger.getLogger(AuthoritiesMapper.class); + private static final Logger logger = LogManager.getLogger(AuthoritiesMapper.class); public static Collection map(JsonArray entitlements) { HashSet authorities = new HashSet<>(); diff --git a/src/main/java/eu/dnetlib/loginservice/utils/Redirect.java b/src/main/java/eu/dnetlib/loginservice/utils/Redirect.java index 909fd81..fb61680 100644 --- a/src/main/java/eu/dnetlib/loginservice/utils/Redirect.java +++ b/src/main/java/eu/dnetlib/loginservice/utils/Redirect.java @@ -3,7 +3,8 @@ package eu.dnetlib.loginservice.utils; import eu.dnetlib.loginservice.properties.Properties; import org.apache.http.client.utils.URIBuilder; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @@ -12,7 +13,7 @@ import java.util.Enumeration; public class Redirect { - private final static Logger logger = Logger.getLogger(Redirect.class); + private final static Logger logger = LogManager.getLogger(Redirect.class); private static String getDomain(String url) throws URISyntaxException { URIBuilder uriBuilder = new URIBuilder(url); diff --git a/src/main/resources/authentication.properties b/src/main/resources/authentication.properties index a8bf4ee..07868b3 100644 --- a/src/main/resources/authentication.properties +++ b/src/main/resources/authentication.properties @@ -1,24 +1,21 @@ authentication.domain=di.uoa.gr -#keycloak -#authentication.keycloak=true -#authentication.oidc.issuer=https://aai-dev.egi.eu/auth/realms/egi -#authentication.oidc.logout=https://aai-dev.egi.eu/auth/realms/egi/protocol/openid-connect/logout - -#openid connect authentication.keycloak=false authentication.oidc.issuer=https://aai.openaire.eu/oidc/ authentication.oidc.logout=https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo= +authentication.oidc.home=http://mpagasas.di.uoa.gr:19080/login-service/openid_connect_login +authentication.oidc.scope=openid,profile,email,eduperson_entitlement +authentication.oidc.id=id +authentication.oidc.secret=secret -authentication.oidc.home=http://rudie.di.uoa.gr:8580/openid_connect_login -authentication.oidc.scope=openid,profile,email,eduperson_entitlement,eduperson_scoped_affiliation,eduperson_unique_id,offline_access -authentication.oidc.id=a8ec6e5c-7bee-46aa-9a6f-18baca923582 -authentication.oidc.secret=2A91F53A1551AC33 +authentication.session=openAIRESession +authentication.accessToken=AccessToken +authentication.redirect=http://mpagasas.di.uoa.gr:4600/reload -authentication.session=EGISession -authentication.accessToken=EGIAccessToken - -authentication.redirect=http://scoobydoo.di.uoa.gr:4000/reload # Currently, this is the only available mapper, set to null or anything else will ignore this. -authentication.authorities-mapper=null -server.port=8580 \ No newline at end of file +authentication.authorities-mapper=openAIREMapper + +## API Documentation Properties +api.title = Login Service +api.description = Login service provides methods to authenticate users through AAI provider and retrieve information of authenticated user. +api.version = ${project.version} \ No newline at end of file diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties deleted file mode 100644 index d9dc948..0000000 --- a/src/main/resources/log4j.properties +++ /dev/null @@ -1,20 +0,0 @@ -log4j.rootLogger = DEBUG, R - -log4j.logger.eu.dnetlib = DEBUG -log4j.logger.org.springframework = DEBUG, S - -log4j.additivity.org.springframework = false - -log4j.appender.R=org.apache.log4j.RollingFileAppender -log4j.appender.R.File=/var/log/dnet/login-service/login-service.log -log4j.appender.R.MaxFileSize=10MB -log4j.appender.R.MaxBackupIndex=10 -log4j.appender.R.layout=org.apache.log4j.PatternLayout -log4j.appender.R.layout.ConversionPattern= %d %p %t [%c] - %m%n - -log4j.appender.S=org.apache.log4j.RollingFileAppender -log4j.appender.S.File=/var/log/dnet/login-service/login-service-spring.log -log4j.appender.S.MaxFileSize=10MB -log4j.appender.S.MaxBackupIndex=10 -log4j.appender.S.layout=org.apache.log4j.PatternLayout -log4j.appender.S.layout.ConversionPattern= %d %p %t [%c] - %m%n \ No newline at end of file diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..ff41fc8 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,39 @@ + + + + + %d %p %t [%c] - %m%n + + + + + + + ${LOG_PATTERN} + + + + + + + + + ${LOG_PATTERN} + + + + + + + + + + + + + + + + \ No newline at end of file