From 8e91741a6e24f0f1f3f69a30b9861eebb5828fbd Mon Sep 17 00:00:00 2001 From: "panagiotis.kanakakis" Date: Mon, 3 Sep 2018 11:47:22 +0000 Subject: [PATCH] 1. Add env var for cookies 2. Add sushi controllers 3. Bug fix on piwik/repo 4. Add stats controllers/service --- Dockerfile | 2 +- pom.xml | 5 +- .../repo/manager/service/config/Config.java | 6 +- ...ndLinkURIAuthenticationSuccessHandler.java | 11 +- .../service/controllers/PiWikApiImpl.java | 2 +- .../controllers/RepositoryApiImpl.java | 3 - .../manager/service/controllers/StatsApi.java | 26 +++++ .../service/controllers/StatsApiImpl.java | 105 ++++++++++++++++++ .../service/controllers/SushiliteApi.java | 2 +- .../service/controllers/SushiliteApiImpl.java | 6 - src/main/resources/application.properties | 67 ++++++----- .../webapp/WEB-INF/applicationContext.xml | 3 + src/test/java/unitest/SushiTest.java | 25 +++++ src/test/resources/application-context.xml | 67 +++++++++++ src/test/resources/applicationContext.xml | 99 +++++++++++++++++ 15 files changed, 386 insertions(+), 43 deletions(-) create mode 100644 src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java create mode 100644 src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java create mode 100644 src/test/java/unitest/SushiTest.java create mode 100644 src/test/resources/application-context.xml create mode 100644 src/test/resources/applicationContext.xml diff --git a/Dockerfile b/Dockerfile index 18d6038..22ceb2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM tomcat:8.5-jre8-alpine +FROM tomcat:7.0.90-jre8 MAINTAINER "pkanakakis@di.uoa.gr" RUN ["rm", "-fr", "/usr/local/tomcat/webapps/ROOT"] COPY ./target/uoa-repository-manager-service.war /usr/local/tomcat/webapps/uoa-repository-manager-service.war diff --git a/pom.xml b/pom.xml index bfbe7e9..32208e4 100644 --- a/pom.xml +++ b/pom.xml @@ -68,10 +68,11 @@ eu.dnetlib - dnet-openaire-usage-stats-api - 2.0.2-SNAPSHOT + dnet-openaire-usage-stats-sushilite + 1.0.0-SNAPSHOT + cglib cglib-nodep diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java b/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java index 9b462ab..1ff850d 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/config/Config.java @@ -31,6 +31,9 @@ public class Config { @Value("${redis.password}") private String password; + @Value("${aai.mode}") + private String aai_mode; + @PostConstruct private void init(){ LOGGER.info(host); @@ -51,7 +54,8 @@ public class Config { DefaultCookieSerializer serializer = new DefaultCookieSerializer(); serializer.setCookieName("openAIRESession"); serializer.setCookiePath("/"); -// serializer.setDomainName(".openaire.eu"); + if(aai_mode.equalsIgnoreCase("production") || aai_mode.equalsIgnoreCase("beta")) + serializer.setDomainName(".openaire.eu"); // serializer.setDomainName(".athenarc.gr"); LOGGER.info("Serializer : " + serializer); return serializer; diff --git a/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java b/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java index 48087dd..49be6eb 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/config/FrontEndLinkURIAuthenticationSuccessHandler.java @@ -3,6 +3,7 @@ package eu.dnetlib.repo.manager.service.config; import com.google.gson.JsonObject; import org.apache.log4j.Logger; import org.mitre.openid.connect.model.OIDCAuthenticationToken; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; @@ -25,6 +26,10 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati LOGGER.debug("Front end uri : " + frontEndURI); } + + @Value("${aai.mode}") + private String aai_mode; + @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { @@ -59,14 +64,16 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati Cookie openAIREUser = new Cookie("openAIREUser", new Gson().toJson(userInfo) ); openAIREUser.setMaxAge(14400); openAIREUser.setPath("/"); -// openAIREUser .setDomain(".openaire.eu"); + if(aai_mode.equalsIgnoreCase("production") || aai_mode.equalsIgnoreCase("beta")) + openAIREUser .setDomain(".openaire.eu"); // openAIREUser.setDomain(".athenarc.gr"); response.addCookie(openAIREUser); Cookie accessToken = new Cookie("AccessToken", authOIDC.getAccessTokenValue()); accessToken.setMaxAge(14400); -// accessToken.setDomain(".openaire.eu"); + if(aai_mode.equalsIgnoreCase("production") || aai_mode.equalsIgnoreCase("beta")) + accessToken.setDomain(".openaire.eu"); accessToken.setPath("/"); // accessToken.setDomain(".athenarc.gr"); diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java index 45eb8b2..6941f10 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/PiWikApiImpl.java @@ -73,7 +73,7 @@ public class PiWikApiImpl implements PiWikApi{ } @Override - @PreAuthorize("hasRole('ROLE_ADMIN')") + @PreAuthorize("hasRole('ROLE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)") public PiwikInfo savePiwikInfo(@RequestBody PiwikInfo piwikInfo) { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update(INSERT_PIWIK_INFO, new Object[]{piwikInfo.getRepositoryId(), piwikInfo.getSiteId(), piwikInfo.getRequestorName(), 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 712ada0..4fcc25a 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 @@ -24,8 +24,6 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; -import org.springframework.security.access.annotation.Secured; -import org.springframework.security.access.prepost.PostAuthorize; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.PathVariable; @@ -40,7 +38,6 @@ import javax.annotation.PostConstruct; import java.sql.Timestamp; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Function; import java.util.stream.Collectors; @Component diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java new file mode 100644 index 0000000..694bf32 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApi.java @@ -0,0 +1,26 @@ +package eu.dnetlib.repo.manager.service.controllers; + +import io.swagger.annotations.Api; +import org.json.JSONException; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +@RequestMapping(value = "/stats") +@Api(description = "Stats API", tags = {"statistics"}) +public interface StatsApi { + + + @RequestMapping(value = "/getStatistics" , method = RequestMethod.GET, + produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + Map getStatistics() throws JSONException; + + + +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java new file mode 100644 index 0000000..23a6d72 --- /dev/null +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/StatsApiImpl.java @@ -0,0 +1,105 @@ +package eu.dnetlib.repo.manager.service.controllers; + +import org.apache.log4j.Logger; +import org.json.JSONException; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponents; +import org.springframework.web.util.UriComponentsBuilder; + +import javax.annotation.PostConstruct; +import java.util.HashMap; +import java.util.Map; + +@Component +public class StatsApiImpl implements StatsApi { + + private RestTemplate restTemplate = null; + + private HttpHeaders httpHeaders; + + private static final Logger LOGGER = Logger.getLogger(RepositoryApiImpl.class); + + @Value("${search.api.baseAddress}") + private String baseAddress; + + @PostConstruct + private void init() { + LOGGER.debug("Initialization method of statistics api!"); + + restTemplate = new RestTemplate(); + restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); + + httpHeaders = new HttpHeaders(); + httpHeaders.set("Content-Type", "application/json"); + } + + + @Override + public Map getStatistics() throws JSONException { + + + String aggregators = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " ( datasourcetypename exact Institutional Repository Aggregator " + + " or datasourcetypename exact Publication Repository Aggregator )"); + + String dataRepositories = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " datasourcetypename exact Data Repository " ); + + String literature = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " ( datasourcetypename exact Institutional Repository " + + " or datasourcetypename exact Publication Repository )"); + + String journal = getTotalByType("datasource",baseAddress+"/resources", + "?query= " + + " oaftype exact datasource and " + + " datasourcetypename exact Journal"); + + String publications = getTotalByType("other",baseAddress,"/publications/count"); + String datasets = getTotalByType("other",baseAddress,"/datasets/count"); + String software = getTotalByType("other",baseAddress,"/software/count"); + + + HashMap stats = new HashMap<>(); + stats.put("aggregators",aggregators); + stats.put("dataRepositories",dataRepositories); + stats.put("literature",literature); + stats.put("journal",journal); + + stats.put("publications",publications); + stats.put("datasets",datasets); + stats.put("software",software); + + + return stats; + } + + + private String getTotalByType(String type,String url,String query) throws JSONException { + UriComponents uriComponents = UriComponentsBuilder + .fromHttpUrl(url + query) + .queryParam("page",0) + .queryParam("size",0) + .queryParam("format","json") + .build().encode(); + + String rs = restTemplate.getForObject(uriComponents.toUri(), String.class); + + if(type.equalsIgnoreCase("datasource")){ + JSONObject metadata = (JSONObject) new JSONObject(rs).get("meta"); + return String.valueOf(metadata.get("total")); + }else + return String.valueOf(new JSONObject(rs).get("total")); + + } +} diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java index fe79c50..cd0df0e 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApi.java @@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RestController; @Api(description = "Sushi-Lite API", tags = {"sushilite"}) public interface SushiliteApi { - @RequestMapping(value = "/getReportResults", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) + @RequestMapping(value = "/getReportResults/{page}/{pageSize}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody ReportResponseWrapper getReportResults(String page, String pageSize, diff --git a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java b/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java index 6759326..e488371 100644 --- a/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java +++ b/src/main/java/eu/dnetlib/repo/manager/service/controllers/SushiliteApiImpl.java @@ -1,16 +1,10 @@ package eu.dnetlib.repo.manager.service.controllers; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; import eu.dnetlib.usagestats.sushilite.domain.ReportItem; -import eu.dnetlib.usagestats.sushilite.domain.ReportResponse; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; -import org.json.JSONException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index acd14a9..7ec8244 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,34 +1,39 @@ infrastructure.name=integration -# + ## Container properties container.hostname=aleka.athenarc.gr container.context=uoa-repository-manager-service container.port = 8480 -# + ## IS -ISLookUpService.url = http://node6.t.openaire.research-infrastructures.eu/is/services/isLookUp -ISRegistryService.url = http://node6.t.openaire.research-infrastructures.eu/is/services/isRegistry -ISSNService.url = http://node6.t.openaire.research-infrastructures.eu/is/services/isSN -# -# +#ISLookUpService.url = http://node6.t.openaire.research-infrastructures.eu/is/services/isLookUp +#ISRegistryService.url = http://node6.t.openaire.research-infrastructures.eu/is/services/isRegistry +#ISSNService.url = http://node6.t.openaire.research-infrastructures.eu/is/services/isSN + +IS.url = https://dev-openaire.d4science.org/is/services +ISLookUpService.url = ${IS.url}/isLookUp +ISRegistryService.url = ${IS.url}/isRegistry +ISSNService.url = ${IS.url}/services/isSN + + ValidatorService.url=http://adonis.athenarc.gr:8080/validator-service/services/validatorWebService -# + ## Broker Service services.broker.url = http://broker1-dev-dnet.d4science.org services.broker.port = 8080 services.broker.api = api/ services.broker.openaire = openaireBroker -# -# + + api.baseAddress=https://dev-openaire.d4science.org/openaire ##api.baseAddress=http://beta.services.openaire.eu:8080/openaire -# + service.repository-rest-api.baseUrl =http://${container.hostname}:${container.port} services.repo-manager.baseUrl = http://${container.hostname}:${container.port}/${container.context} -# + transport.soap.baseAddress = http://${container.hostname}:${container.port}/${container.context} transport.soap.force.local.address = false -# + services.repo-manager.adminEmail = pkanakakis@di.uoa.gr services.repo-manager.repository.testing.mode = false services.repo-manager.deploy.environment = development @@ -45,34 +50,44 @@ services.validator.mail.mode = ssl services.validator.mail.debug = false services.validator.mail.overrideEmail = pkanakakis@di.uoa.gr services.validator.mail.specialRecipients = pkanakakis@di.uoa.gr -# + services.validator.repoRegistration.override = pkanakakis@di.uoa.gr -# -# + + repomanager.db.driverClassName = org.postgresql.Driver repomanager.db.url = jdbc:postgresql://194.177.192.119:5432/repomanager repomanager.db.username = dnet repomanager.db.password = dnetPwd -# + services.repomanager.analyticsURL = http://analytics.openaire.eu/addsite.php? -# + topic_types.url = https://beta.services.openaire.eu/provision/mvc/vocabularies/dnet:topic_types.json -# + oidc.issuer = https://aai.openaire.eu/oidc/ oidc.id = 767422b9-5461-4807-a80a-f9a2072d3a7d oidc.secret = AMQtGlbTXNjwjhF0st28LmM6V0XypMdaVS7tJmGuYFlmH36iIv4t7tVqYuLYrNPkhnZ_GPUJvhymBhFupdgb6aU -# -#oidc.dev.home = http://koulis.athenarc.gr:4200/uoa-repository-manager-service/openid_connect_login -#webapp.dev.front = http://koulis.athenarc.gr:4200/landing -oidc.dev.home = http://aleka.athenarc.gr:4200/uoa-repository-manager-service/openid_connect_login -webapp.dev.front = http://aleka.athenarc.gr:4200/landing -# + +oidc.dev.home = http://koulis.athenarc.gr:4200/uoa-repository-manager-service/openid_connect_login +webapp.dev.front = http://koulis.athenarc.gr:4200/landing +#oidc.dev.home = http://aleka.athenarc.gr:4200/uoa-repository-manager-service/openid_connect_login +#webapp.dev.front = http://aleka.athenarc.gr:4200/landing + +##REDIS-AAI + redis.host = audrey.athenarc.gr redis.port = 6379 redis.password = E#Szvnidd -# +aai.mode = develop + + + services.repomanager.usageStatisticsDiagramsBaseURL = https://beta.openaire.eu/stats3/ services.repomanager.usageStatisticsNumbersBaseURL = https://beta.services.openaire.eu/usagestats/datasources/ services.repomanager.usagestats.adminEmail = pkanakakis@di.uoa.gr +##SUSHI +services.repomanager.usagestats.sushiliteEndpoint = http://beta.services.openaire.eu/usagestats/sushilite/ + +##SEARCH API +search.api.baseAddress=https://beta.services.openaire.eu/search/v2/api \ 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 41423aa..66ec56e 100644 --- a/src/main/webapp/WEB-INF/applicationContext.xml +++ b/src/main/webapp/WEB-INF/applicationContext.xml @@ -19,6 +19,9 @@ + + + diff --git a/src/test/java/unitest/SushiTest.java b/src/test/java/unitest/SushiTest.java new file mode 100644 index 0000000..347e647 --- /dev/null +++ b/src/test/java/unitest/SushiTest.java @@ -0,0 +1,25 @@ +package unitest; + +import eu.dnetlib.repo.manager.service.controllers.SushiliteApi; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = "classpath:applicationContext.xml") +//@WebAppConfiguration +public class SushiTest { + + @Autowired + SushiliteApi sushiliteApi; + + + @Test + public void getReportResults(){ + System.out.println("test"); + } + +} diff --git a/src/test/resources/application-context.xml b/src/test/resources/application-context.xml new file mode 100644 index 0000000..66f1ab9 --- /dev/null +++ b/src/test/resources/application-context.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + classpath*:/gr/**/springContext-*.properties + classpath*:/eu/**/springContext-*.properties + + classpath*:/application.properties + classpath*:/email-texts.properties + + classpath*:dnet-site-wizard.properties + classpath*:dnet-site-override.properties + classpath*:dnet-wizard.properties + classpath*:dnet-override.properties + classpath*:dnet-validator-wizard.properties + classpath*:dnet-validator-override.properties + classpath*:dnet-site-force-override.properties + classpath*:dnet-force-override.properties + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/applicationContext.xml b/src/test/resources/applicationContext.xml new file mode 100644 index 0000000..66ec56e --- /dev/null +++ b/src/test/resources/applicationContext.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + classpath*:/gr/**/springContext-*.properties + classpath*:/eu/**/springContext-*.properties + + classpath*:/application.properties + classpath*:/email-texts.properties + + classpath*:dnet-site-wizard.properties + classpath*:dnet-site-override.properties + classpath*:dnet-wizard.properties + classpath*:dnet-override.properties + classpath*:dnet-validator-wizard.properties + classpath*:dnet-validator-override.properties + classpath*:dnet-site-force-override.properties + classpath*:dnet-force-override.properties + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file