1. Bug fix on piwik

2. Add new emails
3. Bug fix on repository api
This commit is contained in:
Panagiotis Kanakakis 2018-11-23 07:49:00 +00:00
parent 7e3c8194d5
commit d83612439f
12 changed files with 167 additions and 75 deletions

View File

@ -41,7 +41,9 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati
else
userInfo.addProperty("sub", URLEncoder.encode(authOIDC.getUserInfo().getSub(), "UTF-8"));
userInfo.addProperty("fullname", URLEncoder.encode(authOIDC.getUserInfo().getName(), "UTF-8"));
if(authOIDC.getUserInfo().getName() != null)
userInfo.addProperty("fullname", URLEncoder.encode(authOIDC.getUserInfo().getName(), "UTF-8"));
if (authOIDC.getUserInfo().getGivenName() == null)
userInfo.addProperty("firstname", "");

View File

@ -1,6 +1,8 @@
package eu.dnetlib.repo.manager.service.controllers;
import eu.dnetlib.domain.data.PiwikInfo;
import eu.dnetlib.domain.data.Repository;
import org.springframework.security.core.Authentication;
public interface EmailUtils {
@ -14,4 +16,8 @@ public interface EmailUtils {
void sendAdministratorMetricsEnabled(PiwikInfo piwikInfo) throws Exception;
void sendUserMetricsEnabled(PiwikInfo piwikInfo) throws Exception;
void sendUserRegistrationEmail(Repository repository, Authentication authentication) throws Exception;
void sendUserUpdateRepositoryEmail(Repository repository, Authentication authentication) throws Exception;
}

View File

@ -1,11 +1,13 @@
package eu.dnetlib.repo.manager.service.controllers;
import eu.dnetlib.domain.data.PiwikInfo;
import eu.dnetlib.domain.data.Repository;
import eu.dnetlib.repo.manager.service.config.CascadingPropertyLoader;
import eu.dnetlib.utils.MailLibrary;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@ -43,7 +45,7 @@ public class EmailUtilsImpl implements EmailUtils {
@PostConstruct
public void init(){
System.out.println("base url -> " + this.baseUrl);
System.out.println("url -> " + this.baseUrl);
}
@ -186,6 +188,38 @@ public class EmailUtilsImpl implements EmailUtils {
}
}
@Override
public void sendUserRegistrationEmail(Repository repository, Authentication authentication) throws Exception{
/*try {
String subject = "OpenAIRE content provider registration request started for " +
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
String message = "Dear " + authentication.getName() + ",\n" +
"\n" +
"We received a request to register the \"" + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]" +
" to the OpenAIRE compliant list of content providers. " +
"\n A validation process against the OpenAIRE guidelines compatibility " +
" has been started. You will be informed in another message once the process is finished." +
"\n" +
"Please do not reply to this message\n" +
"This message has been generated automatically.\n" +
"If you have any questions, write to 'helpdesk@openaire.eu'. \n" +
"Regards,\n" +
"the OpenAIRE technical team\n";
this.sendMail(repository.getRegisteredBy(), subject, message, false, null);
} catch (Exception e) {
LOGGER.error("Error while sending registration notification email to user: " + repository.getRegisteredBy(), e);
throw e;
}*/
}
@Override
public void sendUserUpdateRepositoryEmail(Repository repository, Authentication authentication) throws Exception {
}
private void sendMail(String email, String subject, String message, boolean sendToSpecial, List<String> repoAdminMails) throws Exception {
ArrayList<String> to = new ArrayList<String>();
to.add(email);

View File

@ -73,7 +73,7 @@ public class PiWikApiImpl implements PiWikApi{
}
@Override
@PreAuthorize("hasRole('ROLE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_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(),
@ -94,7 +94,7 @@ public class PiWikApiImpl implements PiWikApi{
}
@Override
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN')")
public ResponseEntity<Object> approvePiwikSite(@PathVariable("repositoryId") String repositoryId) {
new JdbcTemplate(dataSource).update(APPROVE_PIWIK_SITE, new Object[] {repositoryId}, new int[] {Types.VARCHAR});
return new ResponseEntity<>("OK",HttpStatus.OK);
@ -108,7 +108,7 @@ public class PiWikApiImpl implements PiWikApi{
}
@Override
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN')")
public ResponseEntity<Object> markPiwikSiteAsValidated(@PathVariable("repositoryId") String repositoryId) throws RepositoryServiceException {
try {
approvePiwikSite(repositoryId);
@ -129,7 +129,7 @@ public class PiWikApiImpl implements PiWikApi{
}
@Override
@PreAuthorize("hasRole('ROLE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PORTAL_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
public PiwikInfo enableMetricsForRepository(@RequestParam("officialName") String officialName,
@RequestParam("repoWebsite") String repoWebsite,
@RequestBody PiwikInfo piwikInfo) throws RepositoryServiceException {

View File

@ -8,6 +8,7 @@ import eu.dnetlib.repo.manager.shared.*;
import io.swagger.annotations.Api;
import org.json.JSONException;
import org.springframework.http.MediaType;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
@ -100,7 +101,7 @@ public interface RepositoryApi {
@RequestMapping(value = "/updateRepository", method = RequestMethod.POST,
consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
Repository updateRepository(Repository repository) throws JSONException;
Repository updateRepository(Repository repository, Authentication authentication) throws Exception;
@RequestMapping(value = "/getUrlsOfUserRepos/{user_email}/{page}/{size}/",method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)

View File

@ -20,12 +20,11 @@ import org.json.JSONObject;
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.*;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
@ -36,6 +35,7 @@ import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.PostConstruct;
import javax.xml.ws.Response;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.*;
@ -115,6 +115,7 @@ public class RepositoryApiImpl implements RepositoryApi {
@PostConstruct
private void init() {
LOGGER.debug("Initialization method of repository api!");
LOGGER.debug("Updated version!");
restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
@ -378,29 +379,37 @@ public class RepositoryApiImpl implements RepositoryApi {
repository = this.setRepositoryFeatures(datatype,repository);
LOGGER.debug("storing " + datatype + " repository with id: " + repository.getId());
this.storeRepository(repository);
this.storeRepository(repository, SecurityContextHolder.getContext().getAuthentication());
return repository;
}
@Override
@PreAuthorize("hasRole('ROLE_USER') and #repository.registeredBy == authentication.userInfo.email")
public Repository updateRepository(@RequestBody Repository repository) throws JSONException {
//@PreAuthorize("hasRole('ROLE_USER') and #repository.registeredBy == authentication.userInfo.email")
public Repository updateRepository(Repository repository,Authentication authentication) throws Exception {
UriComponents uriComponents = UriComponentsBuilder
.fromHttpUrl(baseAddress + "/ds/update/")
.build()
.encode();
try {
String json_repository = Converter.repositoryObjectToJson(repository);
HttpEntity<String> httpEntity = new HttpEntity <String> (json_repository,httpHeaders);
restTemplate.postForObject(uriComponents.toUri(),httpEntity,String.class);
String json_repository = Converter.repositoryObectToJson(repository);
LOGGER.debug("JSON to update -> " + json_repository);
HttpEntity<String> httpEntity = new HttpEntity<String>(json_repository, httpHeaders);
ResponseEntity responseEntity = restTemplate.postForObject(uriComponents.toUri(), httpEntity, ResponseEntity.class);
if (responseEntity.getStatusCode().equals(HttpStatus.OK))
emailUtils.sendUserUpdateRepositoryEmail(repository, authentication);
else
LOGGER.debug(responseEntity.getBody().toString());
return repository;
}catch (Exception e){
} catch (Exception e) {
LOGGER.debug("Exception on updateRepository" , e);
emailUtils.reportException(e);
throw e;
}
}
private Repository setRepositoryFeatures(String datatype, Repository repository) {
@ -446,7 +455,7 @@ public class RepositoryApiImpl implements RepositoryApi {
}
private void storeRepository(Repository repository) throws JSONException {
private void storeRepository(Repository repository, Authentication authentication) throws Exception {
Date utilDate = new Date();
Timestamp date = new Timestamp(utilDate.getTime());
@ -469,7 +478,13 @@ public class RepositoryApiImpl implements RepositoryApi {
}
HttpEntity<String> httpEntity = new HttpEntity <String> (json_repository,httpHeaders);
restTemplate.postForObject(uriComponents.toUri(),httpEntity,String.class);
ResponseEntity responseEntity = restTemplate.postForObject(uriComponents.toUri(), httpEntity, ResponseEntity.class);
if(responseEntity.getStatusCode().equals(HttpStatus.OK))
emailUtils.sendUserRegistrationEmail(repository,authentication);
else {
LOGGER.debug(responseEntity.getBody().toString());
}
}
@Override

View File

@ -32,6 +32,9 @@ public class StatsApiImpl implements StatsApi {
@Value("${search.api.usagestats}")
private String usagestatsBaseAddress;
@Value("${search.api.usageEvents}")
private String usagestatsEvents;
@PostConstruct
private void init() {
LOGGER.debug("Initialization method of statistics api!");
@ -138,17 +141,12 @@ public class StatsApiImpl implements StatsApi {
private Integer getUsageStatsTotal() throws JSONException {
UriComponents uriComponents = UriComponentsBuilder
.fromHttpUrl(usagestatsBaseAddress + "/totals")
.fromHttpUrl(usagestatsEvents)
.build().encode();
String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
JSONObject resultSet = new JSONObject(rs);
String downloads = resultSet.getString("downloads");
String views = resultSet.getString("views");
return Integer.valueOf(downloads) + Integer.valueOf(views);
JSONObject totals = resultSet.getJSONObject("totals");
return Integer.valueOf(totals.getString("events"));
}
}

View File

@ -236,8 +236,8 @@ public class Converter {
jsonObject.put("longitude",repository.getLongitude().toString());
jsonObject.put("latitude",repository.getLatitude().toString());
jsonObject.put("timezone",repository.getTimezone());
jsonObject.put("namespaceprefix",repository.getNamespacePrefix());
jsonObject.put("languages",repository.getOdLanguages());
// jsonObject.put("namespaceprefix",repository.getNamespacePrefix());
// jsonObject.put("languages",repository.getOdLanguages());
jsonObject.put("dateofvalidation",convertDateToString(repository.getDateOfValidation()));
/*
@ -247,16 +247,16 @@ public class Converter {
jsonObject.put("typology",repository.getDatasourceClass());
jsonObject.put("platform",repository.getTypology());
jsonObject.put("dateofcollection",convertDateToString(repository.getDateOfCollection()));
jsonObject.put("activationId",repository.getActivationId());
// jsonObject.put("dateofcollection",convertDateToString(repository.getDateOfCollection()));
// jsonObject.put("activationId",repository.getActivationId());
jsonObject.put("description",repository.getDescription());
jsonObject.put("eissn",repository.getEissn());
jsonObject.put("issn",repository.getIssn());
jsonObject.put("lissn",repository.getLissn());
// jsonObject.put("eissn",repository.getEissn());
// jsonObject.put("issn",repository.getIssn());
// jsonObject.put("lissn",repository.getLissn());
jsonObject.put("registeredby",repository.getRegisteredBy());
jsonObject.put("aggregator",repository.getAggregator());
jsonObject.put("collectedfrom",repository.getCollectedFrom());
// jsonObject.put("aggregator",repository.getAggregator());
// jsonObject.put("collectedfrom",repository.getCollectedFrom());
jsonObject.put("managed",repository.isRegistered());
@ -269,7 +269,7 @@ public class Converter {
JSONArray organizations = new JSONArray();
organizations.put(organization);
jsonObject.put("organizations",organizations);
// jsonObject.put("organizations",organizations);

View File

@ -1,7 +1,7 @@
infrastructure.name=integration
## Container properties
container.hostname=aleka.athenarc.gr
container.hostname=localhost
container.context=uoa-repository-manager-service
container.port = 8480
@ -69,14 +69,15 @@ oidc.secret = AMQtGlbTXNjwjhF0st28LmM6V0XypMdaVS7tJmGuYFlmH36iIv4t7tVqYuLYrNPkhn
#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://localhost:4200/uoa-repository-manager-service/openid_connect_login
webapp.dev.front = http://localhost:4200/landing
##REDIS-AAI
redis.host = audrey.athenarc.gr
redis.host = aleka.athenarc.gr
redis.port = 6379
redis.password = E#Szvnidd
redis.password =
#redis.password = E#Szvnidd
aai.mode = develop
@ -91,4 +92,5 @@ services.repomanager.usagestats.sushiliteEndpoint = http://beta.services.openair
##SEARCH API
search.api.baseAddress=https://beta.services.openaire.eu/search/v2/api
search.api.usagestats=https://services.openaire.eu/usagestats
search.api.usagestats=https://services.openaire.eu/usagestats
search.api.usageEvents=http://beta.lbs.openaire.eu:8080/ajax/summary

View File

@ -50,6 +50,7 @@
<util:map id="userRoles">
<entry key="urn:geant:openaire.eu:group:Super+Administrator#aai.openaire.eu" value="ROLE_ADMIN"/>
<entry key="urn:geant:openaire.eu:group:Portal+Administrator#aai.openaire.eu" value="ROLE_PORTAL_ADMIN"/>
</util:map>

View File

@ -1,32 +1,7 @@
#log4j.rootLogger = WARN, R
#
#log4j.logger.eu.dnetlib = DEBUG
#log4j.logger.eu.dnetlib.clients.data.datasourcemanager.ws.Converter = FATAL
#log4j.logger.org.springframework = DEBUG, S
#log4j.additivity.org.springframework = false
#
#log4j.logger.com.opensymphony.xwork2.ognl.OgnlValueStack = FATAL
#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/repository-service/repository-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/repository-service/repository-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
log4j.rootLogger = WARN, R
log4j.logger.eu.dnetlib = DEBUG
log4j.logger.eu.dnetlib.clients.data.datasourcemanager.ws.Converter = FATAL
log4j.logger.org.springframework = DEBUG, S
log4j.additivity.org.springframework = false
@ -35,10 +10,36 @@ log4j.logger.com.opensymphony.xwork2.ObjectFactory = FATAL
log4j.logger.eu.dnetlib.repo.manager=DEBUG
log4j.appender.R=org.apache.log4j.ConsoleAppender
log4j.appender.R=org.apache.log4j.RollingFileAppender
#log4j.appender.R.File=/var/log/dnet/repo-manager/repo-manager-gui.log
log4j.appender.R.File=/var/log/tomcat_dnet/8780/repository-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.ConsoleAppender
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=/var/log/tomcat_dnet/8780/repository-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
log4j.appender.S.layout.ConversionPattern= %d %p %t [%c] - %m%n
#log4j.rootLogger = WARN, R
#
#log4j.logger.org.springframework = DEBUG, S
#log4j.additivity.org.springframework = false
#
#log4j.logger.com.opensymphony.xwork2.ognl.OgnlValueStack = FATAL
#log4j.logger.com.opensymphony.xwork2.ObjectFactory = FATAL
#
#log4j.logger.eu.dnetlib.repo.manager=DEBUG
#
#log4j.appender.R=org.apache.log4j.ConsoleAppender
#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.ConsoleAppender
#log4j.appender.S.layout=org.apache.log4j.PatternLayout
#log4j.appender.S.layout.ConversionPattern= %d %p %t [%c] - %m%n

View File

@ -0,0 +1,32 @@
package unitest;
import eu.dnetlib.repo.manager.service.config.RepoManagerContextLoaderListener;
import eu.dnetlib.repo.manager.service.utils.OaiTools;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RepoManagerContextLoaderListener.class)
//@WebAppConfiguration
public class ValidatorTest {
@Test
public void identiFy(){
String url = "https://repozitorij.srce.unizg.hr/oai";
System.out.println("Identify repository with url : " + url);
try {
System.out.println(OaiTools.identifyRepository(url));
} catch (Exception e) {
System.out.println(e);
}
}
}