diff --git a/pom.xml b/pom.xml index 76bc40b..b231856 100644 --- a/pom.xml +++ b/pom.xml @@ -21,11 +21,6 @@ uoa-user-management [2.0.0-SNAPSHOT, 3.0.0) - - eu.dnetlib - uoa-login-core - 1.0.3 - org.slf4j slf4j-api @@ -56,6 +51,7 @@ javax.servlet-api 3.0.1 + org.springframework.security spring-security-core @@ -71,6 +67,34 @@ spring-security-web 4.2.1.RELEASE + + + org.springframework.session + spring-session-data-redis + 1.3.1.RELEASE + pom + + + biz.paluch.redis + lettuce + 3.5.0.Final + + + javax.servlet + javax.servlet-api + 3.0.1 + + + org.mitre + openid-connect-client + 1.3.0 + + + org.bouncycastle + bcprov-jdk15on + + + com.google.code.gson gson diff --git a/src/main/java/eu/dnetlib/openaire/usermanagement/api/Test3Service.java b/src/main/java/eu/dnetlib/openaire/usermanagement/api/Test3Service.java index 2d33c69..43ac843 100644 --- a/src/main/java/eu/dnetlib/openaire/usermanagement/api/Test3Service.java +++ b/src/main/java/eu/dnetlib/openaire/usermanagement/api/Test3Service.java @@ -7,9 +7,9 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import eu.dnetlib.openaire.user.dao.SQLMigrationUserDAO; import eu.dnetlib.openaire.user.ldap.MUserActionsLDAP; -import eu.dnetlib.openaire.user.login.utils.AuthoritiesMapper; import eu.dnetlib.openaire.user.pojos.migration.LDAPUser; import eu.dnetlib.openaire.user.store.DataSourceConnector; +import eu.dnetlib.openaire.usermanagement.authorization.AuthoritiesMapper; import org.apache.commons.io.IOUtils; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; diff --git a/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/AuthoritiesMapper.java b/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/AuthoritiesMapper.java new file mode 100644 index 0000000..f6702db --- /dev/null +++ b/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/AuthoritiesMapper.java @@ -0,0 +1,41 @@ +package eu.dnetlib.openaire.usermanagement.authorization; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import org.apache.log4j.Logger; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +import java.util.Collection; +import java.util.HashSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class AuthoritiesMapper { + + private static final Logger logger = Logger.getLogger(AuthoritiesMapper.class); + + public static Collection map(JsonArray entitlements) { + HashSet authorities = new HashSet<>(); + String regex = "urn:geant:openaire[.]eu:group:([^:]*):?(.*)?:role=member#aai[.]openaire[.]eu"; + for(JsonElement obj: entitlements) { + Matcher matcher = Pattern.compile(regex).matcher(obj.getAsString()); + if (matcher.find()) { + StringBuilder sb = new StringBuilder(); + if(matcher.group(1) != null && matcher.group(1).length() > 0) { + sb.append(matcher.group(1).replace("+-+", "_").replaceAll("[+.]", "_").toUpperCase()); + } + if(matcher.group(2).length() > 0) { + sb.append("_"); + if(matcher.group(2).equals("admins")) { + sb.append("MANAGER"); + } else { + sb.append(matcher.group(2).toUpperCase()); + } + } + authorities.add(new SimpleGrantedAuthority(sb.toString())); + } + } + return authorities; + } +} diff --git a/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/Config.java b/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/Config.java new file mode 100644 index 0000000..e75b421 --- /dev/null +++ b/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/Config.java @@ -0,0 +1,49 @@ +package eu.dnetlib.openaire.usermanagement.authorization; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import org.springframework.session.web.http.CookieSerializer; +import org.springframework.session.web.http.DefaultCookieSerializer; + +@Configuration +@EnableRedisHttpSession +public class Config { + + private static Logger logger = Logger.getLogger(Config.class); + + @Value("${redis.host:localhost}") + private String host; + + @Value("${redis.port:6379}") + private String port; + + @Value("${redis.password:#{null}}") + private String password; + + @Value("${webbapp.front.domain:.openaire.eu}") + private String domain; + + @Bean + public LettuceConnectionFactory connectionFactory() { + logger.info(String.format("Redis connection listens to %s:%s ",host,port)); + LettuceConnectionFactory factory = new LettuceConnectionFactory(host,Integer.parseInt(port)); + if(password != null) factory.setPassword(password); + return factory; + } + + @Bean + public CookieSerializer cookieSerializer() { + logger.info("Cookie Serializer: Domain is "+domain); + DefaultCookieSerializer serializer = new DefaultCookieSerializer(); + serializer.setCookieName("openAIRESession"); // <1> + serializer.setCookiePath("/"); // <2> +// serializer.setDomainNamePattern(""); //with value "" set's the domain of the service e.g scoobydoo.di.uoa.gr + serializer.setDomainName(domain); + return serializer; + } +} diff --git a/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/EntryPoint.java b/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/EntryPoint.java new file mode 100644 index 0000000..1086333 --- /dev/null +++ b/src/main/java/eu/dnetlib/openaire/usermanagement/authorization/EntryPoint.java @@ -0,0 +1,19 @@ +package eu.dnetlib.openaire.usermanagement.authorization; + +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class EntryPoint implements AuthenticationEntryPoint { + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, + AuthenticationException authException) throws IOException { + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authException.getMessage()); + } + +} + diff --git a/src/main/resources/eu/dnet/openaire/usermanagement/springContext-dnetOpenaireUsersService.properties b/src/main/resources/eu/dnet/openaire/usermanagement/springContext-dnetOpenaireUsersService.properties index d630732..2c001ba 100644 --- a/src/main/resources/eu/dnet/openaire/usermanagement/springContext-dnetOpenaireUsersService.properties +++ b/src/main/resources/eu/dnet/openaire/usermanagement/springContext-dnetOpenaireUsersService.properties @@ -3,3 +3,12 @@ google.recaptcha.key = 6LfYrU8UAAAAAFsl3m2YhP1uavdmAdFEXBkoY_vd role-management.url = http://mpagasas.di.uoa.gr:8080/dnet-role-management client-management.url = http://mpagasas.di.uoa.gr:5100 + +# Redis +redis.host = 127.0.0.1 +#redis.port = 6379 +#redis.password + +webbapp.front = http://mpagasas.di.uoa.gr:4200/reload +webbapp.front.path = / +webbapp.front.domain = .di.uoa.gr diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/webapp/WEB-INF/applicationContext.xml index 3da3ed3..e66588c 100644 --- a/src/main/webapp/WEB-INF/applicationContext.xml +++ b/src/main/webapp/WEB-INF/applicationContext.xml @@ -9,9 +9,7 @@ http://www.springframework.org/schema/context/spring-context-4.2.xsd"> - - - + @@ -33,12 +31,10 @@ classpath*:/eu/**/applicationContext*.properties classpath*:/eu/dnetlib/applicationContext-defaultProperties.properties classpath*:/eu/**/springContext-userManagementService.properties - classpath*:/eu/**/springContext-userLoginCore.properties classpath*:/eu/**/springContext-dnetOpenaireUsersService.properties classpath*:/uoa-override.properties classpath*:/dnet-override.properties - - \ No newline at end of file + diff --git a/src/main/webapp/WEB-INF/springContext-dnetOpenaireUsersService.xml b/src/main/webapp/WEB-INF/springContext-dnetOpenaireUsersService.xml index 22334a2..70396c6 100644 --- a/src/main/webapp/WEB-INF/springContext-dnetOpenaireUsersService.xml +++ b/src/main/webapp/WEB-INF/springContext-dnetOpenaireUsersService.xml @@ -2,12 +2,27 @@ - + - \ No newline at end of file + + + + + + + + + + + + + + +