diff --git a/pom.xml b/pom.xml index aca3231..56ffd53 100644 --- a/pom.xml +++ b/pom.xml @@ -15,52 +15,6 @@ war - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 1.8 - 1.8 - UTF-8 - - - - - maven-war-plugin - 2.6 - - false - - - - - - @@ -231,8 +185,13 @@ LATEST + + commons-fileupload + commons-fileupload + LATEST + - + - - biz.paluch.redis - lettuce - 3.5.0.Final - --> - + redis.clients + jedis + 2.9.0 + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + UTF-8 + + + + + maven-war-plugin + 2.6 + + false + + + + + com.googlecode.maven-download-plugin + download-maven-plugin + 1.3.0 + + + process-resources + + wget + + + + https://github.com/ostranme/swagger-ui-themes/archive/v3.0.0.zip + + true + ${project.build.directory} + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.8 + + + prepare-package + + + + + Add theme + + + + + + + + + + + + + + + diff --git a/src/main/java/eu/dnetlib/repo/manager/service/utils/Config.java b/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java similarity index 57% rename from src/main/java/eu/dnetlib/repo/manager/service/utils/Config.java rename to src/main/java/eu/dnetlib/repo/manager/service/config/Config.java index e5e2c39..53b15bb 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/utils/Config.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java @@ -1,28 +1,28 @@ -/* -package eu.dnetlib.repo.manager.service.utils; +package eu.dnetlib.repo.manager.service.config; +import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 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; import javax.annotation.PostConstruct; -import java.util.logging.Logger; @Configuration @EnableRedisHttpSession -@PropertySource(value = { "classpath:eu/dnetlib/repo/manager/service/application.properties", "classpath:application.properties"} ) -@ComponentScan(basePackages = "eu.dnetlib.repo.manager") +@PropertySource(value = { "classpath:eu/dnetlib/repo/manager/service/application.properties"} ) +@ComponentScan(basePackages = "eu.dnetlib.repo.manager.service.controllers") + public class Config { - private static Logger LOGGER = Logger.getLogger(String.valueOf(Config.class)); + private static Logger LOGGER = Logger.getLogger(Config.class); - @Value("${redis.host}") + @Value("${redis.host:194.177.192.121}") private String host; @Value("${redis.port:6379}") @@ -37,11 +37,13 @@ public class Config { } @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; + JedisConnectionFactory connectionFactory() { + LOGGER.info(String.format("Redis : %s Port : %s Password : %s",host,port,password)); + JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); + jedisConnectionFactory.setHostName(host); + jedisConnectionFactory.setPort(Integer.parseInt(port)); + if(password != null) jedisConnectionFactory.setPassword(password); + return jedisConnectionFactory; } @Bean @@ -49,8 +51,8 @@ public class Config { DefaultCookieSerializer serializer = new DefaultCookieSerializer(); serializer.setCookieName("SESSION"); // <1> serializer.setCookiePath("/"); // <2> + LOGGER.info("Serializer : " + serializer); return serializer; } } -*/ diff --git a/src/main/java/eu/dnetlib/repo/manager/service/utils/FrontEndLinkURIAuthenticationSuccessHandler.java b/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java similarity index 76% rename from src/main/java/eu/dnetlib/repo/manager/service/utils/FrontEndLinkURIAuthenticationSuccessHandler.java rename to src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java index c5de3be..9890080 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/utils/FrontEndLinkURIAuthenticationSuccessHandler.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java @@ -1,10 +1,11 @@ -/* -package eu.dnetlib.repo.manager.service.utils; +package eu.dnetlib.repo.manager.service.config; +import org.apache.log4j.Logger; import org.mitre.openid.connect.model.OIDCAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; +import javax.annotation.PostConstruct; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; @@ -15,8 +16,20 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati private String frontEndURI; + private static final Logger LOGGER = Logger + .getLogger(FrontEndLinkURIAuthenticationSuccessHandler.class); + + @PostConstruct + public void init(){ + LOGGER.debug(frontEndURI); + } + @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + + LOGGER.info(request); + LOGGER.info(response); + OIDCAuthenticationToken authOIDC = (OIDCAuthenticationToken) authentication; Cookie sessionCookie = new Cookie("currentUser", authOIDC.getSub()); int expireSec = -1; @@ -35,4 +48,3 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati } } -*/ diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java index 0321348..04bddf5 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApi.java @@ -94,6 +94,11 @@ public interface RepositoryApi { @ResponseBody List getTimezones(); + @RequestMapping(value = "/updateRepository", method = RequestMethod.POST, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + Repository updateRepository(Repository repository); + @RequestMapping(value = "/updateManagedStatus", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java index a63ef55..039196c 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/RepositoryApiImpl.java @@ -337,12 +337,15 @@ public class RepositoryApiImpl implements RepositoryApi { return repository; } - private void updateRepository(Repository repository) { - this.updateRegisteredByValue(repository.getId(),repository.getRegisteredBy()); - this.updateEnglishName(repository.getId(),repository.getOfficialName(),repository.getEnglishName()); - this.updateLogoUrl(repository.getId(),repository.getLogoUrl()); - this.updateTimezone(repository.getId(), String.valueOf(repository.getTimezone())); - //TODO update datasource type + @Override + public Repository updateRepository(@RequestBody Repository repository) { + /*UriComponents uriComponents = UriComponentsBuilder + .fromHttpUrl(baseAddress + "/ds/update/") + .build() + .encode();*/ + return null; + + } private void updateRegisteredByValue(String id, String registeredBy) { diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java index 37e3ac5..475fddc 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApi.java @@ -1,23 +1,18 @@ -/* package eu.dnetlib.repo.manager.service.controllers; import io.swagger.annotations.Api; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - @RestController @RequestMapping(value = "/user") @Api(description = "User API", tags = {"user"}) public interface UserApi { @RequestMapping(value = "/login" , method = RequestMethod.GET) - void login(HttpServletRequest req, - HttpServletResponse resp); + ResponseEntity login(); } -*/ diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java index f766512..603162c 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/UserApiImpl.java @@ -1,11 +1,18 @@ -/* package eu.dnetlib.repo.manager.service.controllers; +import org.mitre.openid.connect.model.OIDCAuthenticationToken; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Component public class UserApiImpl implements UserApi { @@ -17,11 +24,20 @@ public class UserApiImpl implements UserApi { private String oidc_issuer; @Override - public void login(HttpServletRequest req, - HttpServletResponse resp) { - LOGGER.debug(oidc_issuer); - resp.setStatus(HttpServletResponse.SC_FOUND); - resp.setHeader("Location", oidc_issuer); + @PreAuthorize("hasRole('ROLE_USER')") + public ResponseEntity login() { + OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); + LOGGER.debug("User authentication : " + authentication); + Map body = new HashMap<>(); + body.put("sub",authentication.getSub()); + if(authentication.getUserInfo().getName() == null || authentication.getUserInfo().getName().equals("")) { + body.put("name",authentication.getUserInfo().getGivenName() + " " + authentication.getUserInfo().getFamilyName()); + } else { + body.put("name",authentication.getUserInfo().getName()); + } + body.put("email",authentication.getUserInfo().getEmail()); + List roles = authentication.getAuthorities().stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList()); + body.put("role",roles); + return new ResponseEntity<>(body, HttpStatus.OK); } } -*/ diff --git a/src/main/java/eu/dnetlib/repo/manager/service/utils/OMTDAuthoritiesMapper.java b/src/main/java/eu/dnetlib/repo/manager/service/utils/OMTDAuthoritiesMapper.java new file mode 100644 index 0000000..56bb73d --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/utils/OMTDAuthoritiesMapper.java @@ -0,0 +1,41 @@ +package eu.dnetlib.repo.manager.service.utils; + +import com.nimbusds.jwt.JWT; +import org.mitre.openid.connect.client.OIDCAuthoritiesMapper; +import org.mitre.openid.connect.model.UserInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; + +import java.util.*; + +public class OMTDAuthoritiesMapper implements OIDCAuthoritiesMapper { + + private static Logger logger = LoggerFactory.getLogger(OMTDAuthoritiesMapper.class); + + final private static String ROLE_CLAIMS = "edu_person_entitlements"; + + private Map userRolesMap; + + OMTDAuthoritiesMapper(Map userRoles) { + userRolesMap = new HashMap<>(); + userRoles.forEach((omtdRole, appRole) -> userRolesMap.put(omtdRole, new SimpleGrantedAuthority(appRole))); + } + + @Override + public Collection mapAuthorities(JWT idToken, UserInfo userInfo) { + Set out = new HashSet<>(); + out.add(new SimpleGrantedAuthority("ROLE_USER")); + if(userInfo.getSource().getAsJsonArray(ROLE_CLAIMS) != null) { + userInfo.getSource().getAsJsonArray(ROLE_CLAIMS).forEach(role -> { + SimpleGrantedAuthority authority = userRolesMap.get(role.getAsString()); + if (authority != null) { + logger.debug("Role mapped " + role); + out.add(authority); + } + }); + } + return out; + } +} \ No newline at end of file diff --git a/src/main/resources/application-context.xml b/src/main/resources/application-context.xml index 6cc37b1..8e94317 100644 --- a/src/main/resources/application-context.xml +++ b/src/main/resources/application-context.xml @@ -1,9 +1,9 @@ --> + + diff --git a/src/main/resources/eu/dnetlib/repo/manager/service/aai-security.xml b/src/main/resources/eu/dnetlib/repo/manager/service/aai-security.xml deleted file mode 100644 index a444c48..0000000 --- a/src/main/resources/eu/dnetlib/repo/manager/service/aai-security.xml +++ /dev/null @@ -1,179 +0,0 @@ - diff --git a/src/main/resources/eu/dnetlib/repo/manager/service/application.properties b/src/main/resources/eu/dnetlib/repo/manager/service/application.properties index bc135bd..63dbf32 100644 --- a/src/main/resources/eu/dnetlib/repo/manager/service/application.properties +++ b/src/main/resources/eu/dnetlib/repo/manager/service/application.properties @@ -101,12 +101,14 @@ topic_types.url = https://beta.services.openaire.eu/provision/mvc/vocabularies/d oidc.issuer = https://aai.openminted.eu/oidc/ oidc.id = 24e83176-1312-4ba3-bc0b-ffeebea1603e oidc.secret = U_gLOupYu2trYIOwfxGgZkkZoOHG_zGfaViOUsXcZ7qVQuF1rcJeQYKIDX1TY3z27CIoHaqq9ht2rmAiUmBRYQ -webapp.home = http://localhost:8380/repomanager-service/openid_connect_login -webapp.front=http://localhost:8380/ +oidc.home = http://194.177.192.121:8380/repomanager-service-dev/openid_connect_login +webapp.home = http://194.177.192.121:8380/repomanager-service-dev/openid_connect_login +webapp.dev.front = http://195.134.66.230:3000 -redis.host = 83.212.101.85 -#redis.port = 6379 -#redis.password + +redis.host = 194.177.192.121 +redis.port = 6379 +redis.password = E#Szvnidd services.repomanager.usageStatisticsDiagramsBaseURL = https://beta.openaire.eu/stats3/ services.repomanager.usageStatisticsNumbersBaseURL = https://beta.services.openaire.eu/usagestats/datasources/ diff --git a/src/main/webapp/WEB-INF/aai-security.xml b/src/main/webapp/WEB-INF/aai-security.xml new file mode 100644 index 0000000..3fad77b --- /dev/null +++ b/src/main/webapp/WEB-INF/aai-security.xml @@ -0,0 +1,158 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + openid + + + + + + ${oidc.home} + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/webapp/WEB-INF/applicationContext.xml index e47bdab..b3584af 100644 --- a/src/main/webapp/WEB-INF/applicationContext.xml +++ b/src/main/webapp/WEB-INF/applicationContext.xml @@ -90,4 +90,4 @@ - + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/log4j.properties b/src/main/webapp/WEB-INF/log4j.properties index f7c2cf9..9446c5a 100644 --- a/src/main/webapp/WEB-INF/log4j.properties +++ b/src/main/webapp/WEB-INF/log4j.properties @@ -11,16 +11,14 @@ log4j.logger.com.opensymphony.xwork2.ObjectFactory = FATAL log4j.logger.eu.dnetlib.repo.manager=DEBUG log4j.appender.R=org.apache.log4j.RollingFileAppender -#log4j.appender.R.File=/var/log/dnet/repo-manager/repo-manager-gui.log -log4j.appender.R.File=/tmp/repo-manager-service.log +log4j.appender.R.File=/var/log/dnet45/repomanager-service-dev/repomanager-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/repo-manager/repo-manager-gui-spring.log -log4j.appender.S.File=/tmp/repo-manager-service-spring.log +log4j.appender.S.File=/var/log/dnet45/repomanager-service-dev/repomanager-service-spring.log log4j.appender.S.MaxFileSize=10MB log4j.appender.S.MaxBackupIndex=10 log4j.appender.S.layout=org.apache.log4j.PatternLayout diff --git a/src/main/webapp/WEB-INF/spring-servlet.xml b/src/main/webapp/WEB-INF/spring-servlet.xml index eb812c8..d5d75c6 100644 --- a/src/main/webapp/WEB-INF/spring-servlet.xml +++ b/src/main/webapp/WEB-INF/spring-servlet.xml @@ -2,15 +2,15 @@ - + - + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index b9df1da..8804f55 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -1,9 +1,53 @@ - + + + + org.springframework.web.context.ContextLoaderListener + + + org.springframework.web.util.Log4jConfigListener + + + + contextConfigLocation + + /WEB-INF/applicationContext.xml + /WEB-INF/aai-security.xml + + + + log4jConfigLocation + /WEB-INF/log4j.properties + + + log4jRefreshInterval + 1000 + + + log4jExposeWebAppRoot + false + + + + spring + + org.springframework.web.servlet.DispatcherServlet + + + throwExceptionIfNoHandlerFound + true + + 1 + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + contextAttribute + org.springframework.web.servlet.FrameworkServlet.CONTEXT.spring + + CorsFilter @@ -27,45 +71,24 @@ http://xmlns.jcp.org/xml/ns/javaee " /* - - log4jConfigLocation - /WEB-INF/log4j.properties - - - log4jRefreshInterval - 1000 - - - log4jExposeWebAppRoot - false - - - org.springframework.web.util.Log4jConfigListener - + + springSessionRepositoryFilter + org.springframework.web.filter.DelegatingFilterProxy + + + springSessionRepositoryFilter + /* + REQUEST + ERROR + - - - org.springframework.web.context.ContextLoaderListener - - - - contextConfigLocation - /WEB-INF/applicationContext.xml - - - - - - spring - - org.springframework.web.servlet.DispatcherServlet - - 1 - + + springSecurityFilterChain + /* + spring / - - \ No newline at end of file +