Initial commit for monitor-service.
This commit is contained in:
parent
408790a368
commit
1ff5f13223
|
@ -0,0 +1,81 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>eu.dnetlib</groupId>
|
||||||
|
<artifactId>uoa-monitor-service</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<packaging>war</packaging>
|
||||||
|
|
||||||
|
<name>uoa-monitor-service</name>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>1.5.18.RELEASE</version>
|
||||||
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-mongodb</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId> org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-logging</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>log4j</groupId>
|
||||||
|
<artifactId>log4j</artifactId>
|
||||||
|
<version>1.2.17</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
<version>2.8.2</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<!--3d answer: https://stackoverflow.com/questions/23260057/the-forked-vm-terminated-without-saying-properly-goodbye-vm-crash-or-system-exi-->
|
||||||
|
<!--If you use openjdk there might be a problem with surfire plugin - uncomment following lines-->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.19.1</version>
|
||||||
|
<configuration>
|
||||||
|
<!--<testFailureIgnore>true</testFailureIgnore>-->
|
||||||
|
<useSystemClassLoader>false</useSystemClassLoader>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
<finalName>uoa-monitor-service</finalName>
|
||||||
|
</build>
|
||||||
|
</project>
|
|
@ -0,0 +1,14 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice;
|
||||||
|
|
||||||
|
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||||
|
import org.springframework.boot.web.support.SpringBootServletInitializer;
|
||||||
|
//import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
|
||||||
|
|
||||||
|
public class ServletInitializer extends SpringBootServletInitializer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
|
||||||
|
return application.sources(UoaMonitorServiceApplication.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.configuration.properties.GoogleConfig;
|
||||||
|
import eu.dnetlib.uoamonitorservice.configuration.properties.MailConfig;
|
||||||
|
import eu.dnetlib.uoamonitorservice.configuration.properties.MongoConfig;
|
||||||
|
import eu.dnetlib.uoamonitorservice.configuration.properties.SecurityConfig;
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.PropertySource;
|
||||||
|
import org.springframework.context.annotation.PropertySources;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
@PropertySources({
|
||||||
|
@PropertySource("classpath:monitorservice.properties"),
|
||||||
|
@PropertySource(value = "file:/usr/share/tomcat7/lib/dnet-override.properties", ignoreResourceNotFound = true),
|
||||||
|
@PropertySource(value = "file:/var/lib/tomcat_dnet/8380/lib/dnet-override.properties", ignoreResourceNotFound = true)
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
@EnableConfigurationProperties({SecurityConfig.class, MailConfig.class, GoogleConfig.class, MongoConfig.class})
|
||||||
|
|
||||||
|
public class UoaMonitorServiceApplication {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(UoaMonitorServiceApplication.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.configuration.properties.SecurityConfig;
|
||||||
|
import eu.dnetlib.uoamonitorservice.handlers.AuthorizationHandler;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
|
||||||
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class UoaMonitorServiceConfiguration extends WebMvcConfigurerAdapter {
|
||||||
|
private final Logger log = Logger.getLogger(this.getClass());
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private SecurityConfig securityConfig;
|
||||||
|
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
|
||||||
|
return new PropertySourcesPlaceholderConfigurer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
|
registry.addInterceptor(new AuthorizationHandler(securityConfig.getUserInfoUrl(), securityConfig.getOriginServer(), securityConfig.getPostsAllowed()))
|
||||||
|
.addPathPatterns("/**");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.configuration.mongo;
|
||||||
|
|
||||||
|
import com.mongodb.MongoClient;
|
||||||
|
import com.mongodb.MongoCredential;
|
||||||
|
import com.mongodb.ServerAddress;
|
||||||
|
import eu.dnetlib.uoamonitorservice.configuration.properties.MongoConfig;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.data.mongodb.MongoDbFactory;
|
||||||
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||||
|
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
|
||||||
|
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableMongoRepositories(basePackages = {"eu.dnetlib.uoamonitorservice.dao"})
|
||||||
|
public class MongoConnection {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MongoConfig mongoConfig;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public MongoDbFactory mongoDbFactory() {
|
||||||
|
return new SimpleMongoDbFactory(getMongoClient(), mongoConfig.getDatabase());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean(name = "mongoTemplate")
|
||||||
|
@Primary
|
||||||
|
public MongoTemplate getMongoTemplate() {
|
||||||
|
return new MongoTemplate(mongoDbFactory());
|
||||||
|
}
|
||||||
|
|
||||||
|
private MongoClient getMongoClient() {
|
||||||
|
if(mongoConfig.getUsername() != null && mongoConfig.getPassword() != null){
|
||||||
|
return new MongoClient(Collections.singletonList(
|
||||||
|
new ServerAddress(mongoConfig.getHost(), mongoConfig.getPort())),
|
||||||
|
Collections.singletonList(MongoCredential.createCredential(mongoConfig.getUsername(), mongoConfig.getDatabase(), mongoConfig.getPassword().toCharArray())));
|
||||||
|
} else {
|
||||||
|
return new MongoClient(Collections.singletonList(new ServerAddress(mongoConfig.getHost(), mongoConfig.getPort())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.configuration.properties;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
@ConfigurationProperties("monitorservice.google")
|
||||||
|
public class GoogleConfig {
|
||||||
|
|
||||||
|
private String secret;
|
||||||
|
|
||||||
|
public String getSecret() {
|
||||||
|
return secret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSecret(String secret) {
|
||||||
|
this.secret = secret;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.configuration.properties;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
@ConfigurationProperties("monitorservice.mail")
|
||||||
|
public class MailConfig {
|
||||||
|
|
||||||
|
private String host;
|
||||||
|
private String port;
|
||||||
|
private String auth;
|
||||||
|
private String from;
|
||||||
|
private String username;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
|
||||||
|
public void setHost(String host) {
|
||||||
|
this.host = host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPort(String port) {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuth(String auth) {
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrom(String from) {
|
||||||
|
this.from = from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHost() {
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuth() {
|
||||||
|
return auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFrom() {
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.configuration.properties;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
@ConfigurationProperties("monitorservice.mongodb")
|
||||||
|
public class MongoConfig {
|
||||||
|
|
||||||
|
private String host;
|
||||||
|
private String database;
|
||||||
|
private String username;
|
||||||
|
private String password;
|
||||||
|
private int port;
|
||||||
|
|
||||||
|
|
||||||
|
public String getHost() {
|
||||||
|
return host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHost(String host) {
|
||||||
|
this.host = host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDatabase() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDatabase(String database) {
|
||||||
|
this.database = database;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsername(String username) {
|
||||||
|
this.username = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPort() {
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPort(int port) {
|
||||||
|
this.port = port;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.configuration.properties;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ConfigurationProperties("monitorservice.security")
|
||||||
|
public class SecurityConfig {
|
||||||
|
|
||||||
|
private String userInfoUrl;
|
||||||
|
private String originServer;
|
||||||
|
private List<String> postsAllowed = new ArrayList<>();
|
||||||
|
|
||||||
|
public void setUserInfoUrl(String userInfoUrl) {
|
||||||
|
this.userInfoUrl = userInfoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOriginServer(String originServer) {
|
||||||
|
this.originServer = originServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void setPostsAllowed(List<String> posts) {
|
||||||
|
this.postsAllowed = posts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserInfoUrl() {
|
||||||
|
return userInfoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOriginServer() {
|
||||||
|
return originServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getPostsAllowed() {
|
||||||
|
return postsAllowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,106 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.controllers;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@CrossOrigin(origins = "*")
|
||||||
|
public class StakeholderController {
|
||||||
|
private final Logger log = Logger.getLogger(this.getClass());
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StakeholderDAO stakeholderDAO;
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder/all", method = RequestMethod.GET)
|
||||||
|
public List<Stakeholder> getAllStakeholders(@RequestParam(required = false) String type) {
|
||||||
|
List<Stakeholder> stakeholders;
|
||||||
|
if(type == null) {
|
||||||
|
stakeholders = stakeholderDAO.findAll();
|
||||||
|
} else {
|
||||||
|
stakeholders = stakeholderDAO.findByType(type);
|
||||||
|
}
|
||||||
|
return stakeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder/default", method = RequestMethod.GET)
|
||||||
|
public List<Stakeholder> getAllDefaultStakeholders(@RequestParam(required = false) String type) {
|
||||||
|
List<Stakeholder> stakeholders;
|
||||||
|
if(type == null) {
|
||||||
|
stakeholders = stakeholderDAO.findByIsDefaultProfile(true);
|
||||||
|
} else {
|
||||||
|
stakeholders = stakeholderDAO.findByIsDefaultProfileAndType(true, type);
|
||||||
|
}
|
||||||
|
return stakeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder", method = RequestMethod.GET)
|
||||||
|
public List<Stakeholder> getAllRealStakeholders(@RequestParam(required = false) String type) {
|
||||||
|
List<Stakeholder> stakeholders;
|
||||||
|
if(type == null) {
|
||||||
|
stakeholders = stakeholderDAO.findByIsDefaultProfile(false);
|
||||||
|
} else {
|
||||||
|
stakeholders = stakeholderDAO.findByIsDefaultProfileAndType(false, type);
|
||||||
|
}
|
||||||
|
log.debug(new Date());
|
||||||
|
|
||||||
|
return stakeholders;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder/dates", method = RequestMethod.GET)
|
||||||
|
public List<Date> getAllStakeholderDates() {
|
||||||
|
List<Stakeholder> profiles = stakeholderDAO.findAll();
|
||||||
|
List<Date> profileDates = new ArrayList<>();
|
||||||
|
|
||||||
|
int i=0;
|
||||||
|
for(Stakeholder profile : profiles) {
|
||||||
|
log.debug(profile.getCreationDate());
|
||||||
|
profileDates.add(profile.getCreationDate());
|
||||||
|
log.debug(profileDates.get(i));
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return profileDates;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder/dates1", method = RequestMethod.GET)
|
||||||
|
public List<String> getAllStakeholderDates1() {
|
||||||
|
List<Stakeholder> profiles = stakeholderDAO.findAll();
|
||||||
|
List<String> profileDates = new ArrayList<>();
|
||||||
|
|
||||||
|
for(Stakeholder profile : profiles) {
|
||||||
|
log.debug(profile.getCreationDate().toString());
|
||||||
|
profileDates.add(profile.getCreationDate().toString());
|
||||||
|
}
|
||||||
|
return profileDates;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder/dates2", method = RequestMethod.GET)
|
||||||
|
public List<String> getAllStakeholderDates2() {
|
||||||
|
List<Stakeholder> profiles = stakeholderDAO.findAll();
|
||||||
|
List<String> profileDates = new ArrayList<>();
|
||||||
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
|
for(Stakeholder profile : profiles) {
|
||||||
|
log.debug(format.format(profile.getCreationDate()));
|
||||||
|
profileDates.add(format.format(profile.getCreationDate()));
|
||||||
|
}
|
||||||
|
return profileDates;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "/stakeholder/save", method = RequestMethod.POST)
|
||||||
|
public Stakeholder insertStakeholder(@RequestBody Stakeholder stakeholder) {
|
||||||
|
//Stakeholder stakeholder = new Stakeholder();
|
||||||
|
|
||||||
|
Stakeholder stakeholderSaved = stakeholderDAO.save(stakeholder);
|
||||||
|
|
||||||
|
return stakeholderSaved;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.controllers;
|
||||||
|
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@CrossOrigin(origins = "*")
|
||||||
|
public class TestController {
|
||||||
|
private final Logger log = Logger.getLogger(this.getClass());
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private StakeholderDAO stakeholderDAO;
|
||||||
|
|
||||||
|
@RequestMapping("/")
|
||||||
|
public String index() {
|
||||||
|
return "Greetings from Spring Boot!";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check ExceptionHandler
|
||||||
|
@RequestMapping(value = "/test-error1", method = RequestMethod.GET)
|
||||||
|
public Stakeholder getFirstStakeholder() {
|
||||||
|
List<Stakeholder> stakeholders;
|
||||||
|
stakeholders = stakeholderDAO.findAll();
|
||||||
|
|
||||||
|
return stakeholders.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/test-error2", method = RequestMethod.GET)
|
||||||
|
public String getParam(@RequestParam() String param) {
|
||||||
|
return param;
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/test-error3", method = RequestMethod.GET)
|
||||||
|
public String getSubstringOfNull() {
|
||||||
|
String str = null;
|
||||||
|
return str.substring(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.dao;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
|
import org.springframework.data.mongodb.repository.MongoRepository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface MongoDBStakeholderDAO extends StakeholderDAO, MongoRepository<Stakeholder, String> {
|
||||||
|
List<Stakeholder> findAll();
|
||||||
|
List<Stakeholder> findByType(String type);
|
||||||
|
|
||||||
|
List<Stakeholder> findByIsDefaultProfile(boolean isDefaultProfile);
|
||||||
|
List<Stakeholder> findByIsDefaultProfileAndType(boolean isDefaultProfile, String type);
|
||||||
|
|
||||||
|
Stakeholder save(Stakeholder stakeholder);
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.dao;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface StakeholderDAO {
|
||||||
|
List<Stakeholder> findAll();
|
||||||
|
List<Stakeholder> findByType(String type);
|
||||||
|
|
||||||
|
List<Stakeholder> findByIsDefaultProfile(boolean isDefaultProfile);
|
||||||
|
List<Stakeholder> findByIsDefaultProfileAndType(boolean isDefaultProfile, String type);
|
||||||
|
|
||||||
|
Stakeholder save(Stakeholder stakeholder);
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Category {
|
||||||
|
private String name;
|
||||||
|
private String alias;
|
||||||
|
private String description;
|
||||||
|
private boolean isActive;
|
||||||
|
private boolean isPublic;
|
||||||
|
private boolean isOverview;
|
||||||
|
private List<SubCategory> subCategories;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlias() {
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActive(boolean active) {
|
||||||
|
isActive = active;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPublic() {
|
||||||
|
return isPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublic(boolean aPublic) {
|
||||||
|
isPublic = aPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOverview() {
|
||||||
|
return isOverview;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOverview(boolean overview) {
|
||||||
|
isOverview = overview;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SubCategory> getSubCategories() {
|
||||||
|
return subCategories;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSubCategories(List<SubCategory> subCategories) {
|
||||||
|
this.subCategories = subCategories;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.springframework.data.annotation.Id;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
enum IndicatorType {
|
||||||
|
// Do not rename or remove existring values. This may cause problems with already stored values in DB
|
||||||
|
number, chart;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum IndicatorWidth {
|
||||||
|
// Do not rename or remove existring values. This may cause problems with already stored values in DB
|
||||||
|
small, medium, large;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Indicator {
|
||||||
|
@Id
|
||||||
|
@JsonProperty("_id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
private IndicatorType type; //number,chart
|
||||||
|
private IndicatorWidth width; //small,medium,large
|
||||||
|
private List<String> tags;
|
||||||
|
private boolean isActive;
|
||||||
|
private boolean isPublic;
|
||||||
|
private List<IndicatorPath> indicatorPaths;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IndicatorType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(IndicatorType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IndicatorWidth getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWidth(IndicatorWidth width) {
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getTags() {
|
||||||
|
return tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTags(List<String> tags) {
|
||||||
|
this.tags = tags;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActive(boolean isActive) {
|
||||||
|
this.isActive = isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPublic() {
|
||||||
|
return isPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublic(boolean isPublic) {
|
||||||
|
this.isPublic = isPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<IndicatorPath> getNdicatorPaths() {
|
||||||
|
return indicatorPaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNdicatorPaths(List<IndicatorPath> ndicatorPaths) {
|
||||||
|
this.indicatorPaths = ndicatorPaths;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
enum IndicatorPathType {
|
||||||
|
// Do not rename or remove existring values. This may cause problems with already stored values in DB
|
||||||
|
table, bar, column;
|
||||||
|
}
|
||||||
|
|
||||||
|
public class IndicatorPath {
|
||||||
|
private IndicatorPathType type; // for charts is type of chart {table, bar, column, etc}
|
||||||
|
private String source; // for numbers is the service {statistics, search, metrics} for charts is the tool {stats-tool,old,metrics, fake}
|
||||||
|
private String url;
|
||||||
|
private List<String> jsonPath;
|
||||||
|
|
||||||
|
public IndicatorPathType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(IndicatorPathType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSource() {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSource(String source) {
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getJsonPath() {
|
||||||
|
return jsonPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJsonPath(List<String> jsonPath) {
|
||||||
|
this.jsonPath = jsonPath;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,139 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import org.springframework.data.annotation.Id;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
enum StakeholderType
|
||||||
|
{
|
||||||
|
// Do not rename or remove existring values. This may cause problems with already stored values in DB
|
||||||
|
funder, ri, project, organization;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class Stakeholder {
|
||||||
|
@Id
|
||||||
|
@JsonProperty("_id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
private StakeholderType type; // private StakeholderType type;
|
||||||
|
private String index_id;
|
||||||
|
private String index_name;
|
||||||
|
private String index_shortName;
|
||||||
|
private String alias;
|
||||||
|
private boolean isDefaultProfile;
|
||||||
|
private boolean isActive;
|
||||||
|
private boolean isPublic;
|
||||||
|
private Date creationDate;
|
||||||
|
private Date updateDate;
|
||||||
|
private List<String> managers;
|
||||||
|
|
||||||
|
private List<Topic> topics;
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StakeholderType getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(StakeholderType type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndex_id() {
|
||||||
|
return index_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndex_id(String index_id) {
|
||||||
|
this.index_id = index_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndex_name() {
|
||||||
|
return index_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndex_name(String index_name) {
|
||||||
|
this.index_name = index_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getIndex_shortName() {
|
||||||
|
return index_shortName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndex_shortName(String index_shortName) {
|
||||||
|
this.index_shortName = index_shortName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlias() {
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDefaultProfile() {
|
||||||
|
return isDefaultProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultProfile(boolean defaultProfile) {
|
||||||
|
isDefaultProfile = defaultProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActive(boolean active) {
|
||||||
|
isActive = active;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPublic() {
|
||||||
|
return isPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublic(boolean aPublic) {
|
||||||
|
isPublic = aPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreationDate() {
|
||||||
|
return creationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreationDate(Date creationDate) {
|
||||||
|
this.creationDate = creationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getUpdateDate() {
|
||||||
|
return updateDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdateDate(Date updateDate) {
|
||||||
|
this.updateDate = updateDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getManagers() {
|
||||||
|
return managers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setManagers(List<String> managers) {
|
||||||
|
this.managers = managers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Topic> getTopics() {
|
||||||
|
return topics;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTopics(List<Topic> topics) {
|
||||||
|
this.topics = topics;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,69 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class SubCategory {
|
||||||
|
private String name;
|
||||||
|
private String alias;
|
||||||
|
private String description;
|
||||||
|
private boolean isActive;
|
||||||
|
private boolean isPublic;
|
||||||
|
private List<Indicator> charts;
|
||||||
|
private List<Indicator> numbers;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlias() {
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActive(boolean active) {
|
||||||
|
isActive = active;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPublic() {
|
||||||
|
return isPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublic(boolean aPublic) {
|
||||||
|
isPublic = aPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Indicator> getCharts() {
|
||||||
|
return charts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCharts(List<Indicator> charts) {
|
||||||
|
this.charts = charts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Indicator> getNumbers() {
|
||||||
|
return numbers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumbers(List<Indicator> numbers) {
|
||||||
|
this.numbers = numbers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Topic {
|
||||||
|
private String name;
|
||||||
|
private String alias;
|
||||||
|
private String description;
|
||||||
|
private boolean isActive;
|
||||||
|
private boolean isPublic;
|
||||||
|
private List<Category> categories;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAlias() {
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAlias(String alias) {
|
||||||
|
this.alias = alias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return isActive;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setActive(boolean active) {
|
||||||
|
isActive = active;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPublic() {
|
||||||
|
return isPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPublic(boolean aPublic) {
|
||||||
|
isPublic = aPublic;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Category> getCategories() {
|
||||||
|
return categories;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategories(List<Category> categories) {
|
||||||
|
this.categories = categories;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.handlers;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.handlers.utils.AuthorizationUtils;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AuthorizationHandler extends HandlerInterceptorAdapter {
|
||||||
|
private final Logger log = Logger.getLogger(this.getClass());
|
||||||
|
private AuthorizationUtils helper = new AuthorizationUtils();
|
||||||
|
private List<String> allowedPostRequests;
|
||||||
|
|
||||||
|
public AuthorizationHandler(String userInfoUrl, String originServer, List<String> allowedPostRequests){
|
||||||
|
helper.setOriginServer(originServer);
|
||||||
|
helper.setUserInfoUrl(userInfoUrl);
|
||||||
|
this.allowedPostRequests = allowedPostRequests;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean preHandle(
|
||||||
|
HttpServletRequest request,
|
||||||
|
HttpServletResponse response,
|
||||||
|
Object handler) throws Exception {
|
||||||
|
// log.debug("request method " + request.getRemoteHost());
|
||||||
|
log.debug("properties: " + helper.getOriginServer() + " "+ helper.getUserInfoUrl());
|
||||||
|
log.debug(allowedPostRequests);
|
||||||
|
log.debug(allowedPostRequests.contains(request.getServletPath()));
|
||||||
|
log.debug(request.getServletPath());
|
||||||
|
if((request.getMethod().equals("POST") || request.getMethod().equals("DELETE")) &&
|
||||||
|
!allowedPostRequests.contains(request.getServletPath())) {
|
||||||
|
//TODO check domain & check user info
|
||||||
|
if(!this.helper.checkCookies(request) || !helper.isAuthorized(helper.getToken(request))){
|
||||||
|
|
||||||
|
response.setHeader("Access-Control-Allow-Credentials","true");
|
||||||
|
response.setHeader("Access-Control-Allow-Origin","*");
|
||||||
|
response.setHeader("Vary","Origin");
|
||||||
|
|
||||||
|
response.setStatus(403);
|
||||||
|
response.sendError(403, "Forbidden: You don't have permission to access. Maybe you are not registered.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// @Override
|
||||||
|
// public void postHandle(
|
||||||
|
// HttpServletRequest request,
|
||||||
|
// HttpServletResponse response,
|
||||||
|
// Object handler,
|
||||||
|
// ModelAndView modelAndView) throws Exception {
|
||||||
|
// log.info("I am here - postHandle ");
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public void afterCompletion(
|
||||||
|
// HttpServletRequest request,
|
||||||
|
// HttpServletResponse response,
|
||||||
|
// Object handler, Exception ex) {
|
||||||
|
// log.info("I am here - afterCompletion ");
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.handlers;
|
||||||
|
|
||||||
|
import eu.dnetlib.uoamonitorservice.responses.ExceptionResponse;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
import org.springframework.data.crossstore.ChangeSetPersister;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.MissingServletRequestParameterException;
|
||||||
|
import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||||
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@ControllerAdvice
|
||||||
|
@RestController
|
||||||
|
public class ExceptionsHandler {
|
||||||
|
private final Logger log = Logger.getLogger(this.getClass());
|
||||||
|
|
||||||
|
@ExceptionHandler(MissingServletRequestParameterException.class)
|
||||||
|
public ResponseEntity<ExceptionResponse> invalidInput(Exception ex) {
|
||||||
|
ExceptionResponse response = new ExceptionResponse();
|
||||||
|
response.setErrorCode("Validation Error");
|
||||||
|
response.setErrorMessage("Invalid inputs.");
|
||||||
|
response.setErrors(ex.getMessage());
|
||||||
|
response.setStatus(HttpStatus.BAD_REQUEST);
|
||||||
|
log.debug("invalidInput exception");
|
||||||
|
return new ResponseEntity<ExceptionResponse>(response, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ExceptionHandler(NullPointerException.class)
|
||||||
|
public ResponseEntity<ExceptionResponse> nullPointerException(Exception ex) {
|
||||||
|
ExceptionResponse response = new ExceptionResponse();
|
||||||
|
response.setErrorCode("Null pointer Exception");
|
||||||
|
response.setErrorMessage("Null pointer Exception");
|
||||||
|
response.setErrors(ex.getMessage());
|
||||||
|
response.setStatus(HttpStatus.BAD_REQUEST);
|
||||||
|
log.debug("nullPointerException exception");
|
||||||
|
return new ResponseEntity<ExceptionResponse>(response, HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ExceptionHandler(ChangeSetPersister.NotFoundException.class)
|
||||||
|
public ResponseEntity<ExceptionResponse> notFoundException(Exception ex) {
|
||||||
|
ExceptionResponse response = new ExceptionResponse();
|
||||||
|
response.setErrorCode("Not found Exception");
|
||||||
|
response.setErrorMessage("Not found Exception");
|
||||||
|
response.setErrors(ex.getMessage());
|
||||||
|
response.setStatus(HttpStatus.NOT_FOUND);
|
||||||
|
log.debug("notFoundException exception");
|
||||||
|
return new ResponseEntity<ExceptionResponse>(response, HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,250 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.handlers.utils;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
import javax.servlet.http.Cookie;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
public class AuthorizationUtils {
|
||||||
|
private final Logger log = Logger.getLogger(this.getClass());
|
||||||
|
private String userInfoUrl = null;
|
||||||
|
// private String communityAPI ="";
|
||||||
|
// List<String> adminRoles = new ArrayList<String>(Arrays.asList("Super Administrator", "Portal Administrator"));
|
||||||
|
private String originServer= null;
|
||||||
|
public Boolean checkCookies(HttpServletRequest request){
|
||||||
|
Boolean valid = true;
|
||||||
|
String cookieValue = this.getCookie(request,"AccessToken");
|
||||||
|
if(cookieValue == null || cookieValue.isEmpty()){
|
||||||
|
log.info("no cookie available ");
|
||||||
|
valid = false;
|
||||||
|
}else {
|
||||||
|
String headerValue = this.getHeadersInfo(request, "x-xsrf-token");
|
||||||
|
if(headerValue == null || headerValue.isEmpty()){
|
||||||
|
log.info("no header available ");
|
||||||
|
valid = false;
|
||||||
|
}else{
|
||||||
|
if(!cookieValue.equals(headerValue)){
|
||||||
|
log.info("no proper header or cookie ");
|
||||||
|
valid = false;
|
||||||
|
}else if(!hasValidOrigin(this.getHeadersInfo(request, "origin"))){
|
||||||
|
log.info("no proper origin ");
|
||||||
|
valid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return valid;
|
||||||
|
}
|
||||||
|
public String getToken(HttpServletRequest request){
|
||||||
|
return this.getHeadersInfo(request, "x-xsrf-token");
|
||||||
|
}
|
||||||
|
private String getCookie(HttpServletRequest request, String cookieName){
|
||||||
|
if(request.getCookies() == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for(Cookie c: request.getCookies()){
|
||||||
|
// log.debug("cookie "+ c.getName()+ " "+ c.getValue());
|
||||||
|
if(c.getName().equals(cookieName)){
|
||||||
|
return c.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
private String getHeadersInfo(HttpServletRequest request, String name) {
|
||||||
|
|
||||||
|
Enumeration headerNames = request.getHeaderNames();
|
||||||
|
while (headerNames.hasMoreElements()) {
|
||||||
|
String key = (String) headerNames.nextElement();
|
||||||
|
String value = request.getHeader(key);
|
||||||
|
// log.debug(" key: "+ key+" value: "+ value);
|
||||||
|
if(name.equals(key)){
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
public boolean hasValidOrigin(String origin) {
|
||||||
|
if (origin != null && origin.indexOf(originServer)!=-1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
log.debug("Not valid origin. Origin server is \"" + origin + "\", but expected value is \"" + originServer + "\". If the expec cted value is not right, check properties file. ");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public UserInfo getUserInfo(String accessToken){
|
||||||
|
String url=userInfoUrl+accessToken;
|
||||||
|
URL obj = null;
|
||||||
|
String responseStr=null;
|
||||||
|
// log.debug("User info url is "+url);
|
||||||
|
|
||||||
|
try {
|
||||||
|
obj = new URL(url);
|
||||||
|
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
||||||
|
if (con.getResponseCode() != 200) {
|
||||||
|
log.debug("User info response code is: " + con.getResponseCode());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
||||||
|
StringBuffer response = new StringBuffer();
|
||||||
|
String inputLine;
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
response.append(inputLine).append("\n");
|
||||||
|
}
|
||||||
|
in.close();
|
||||||
|
responseStr = response.toString();
|
||||||
|
}catch(Exception e){
|
||||||
|
log.error("An error occured while trying to fetch user info ",e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return json2UserInfo(responseStr);
|
||||||
|
}
|
||||||
|
private UserInfo json2UserInfo(String json) {
|
||||||
|
|
||||||
|
// log.debug("Try to create userInfo class from json: "+json);
|
||||||
|
if (json == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedReader br = new BufferedReader(new StringReader(json));
|
||||||
|
//convert the json string back to object
|
||||||
|
Gson gson = new Gson();
|
||||||
|
UserInfo userInfo = null;
|
||||||
|
try {
|
||||||
|
userInfo = gson.fromJson(br, UserInfo.class);
|
||||||
|
}catch(Exception e){
|
||||||
|
log.debug("Error in parsing json response. Given json is : "+json, e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// log.debug("Original response.........: "+userInfo.toString());
|
||||||
|
try {
|
||||||
|
if(userInfo != null && userInfo.getEdu_person_entitlements() != null ) {
|
||||||
|
|
||||||
|
for (int i = 0; i < userInfo.getEdu_person_entitlements().size(); i++) {
|
||||||
|
String role = userInfo.getEdu_person_entitlements().get(i);
|
||||||
|
// log.debug("AAI role: "+role);
|
||||||
|
role = role.split(":")[role.split(":").length-1];
|
||||||
|
role = role.replace("+"," ");
|
||||||
|
// log.debug("Adding parsed role : "+role);
|
||||||
|
userInfo.getEdu_person_entitlements().set(i,role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}catch(Exception e){
|
||||||
|
log.debug("Error in parsing Edu_person_entitlements : ",e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// log.debug("After handling roles : "+userInfo.toString());
|
||||||
|
|
||||||
|
|
||||||
|
return userInfo;
|
||||||
|
}
|
||||||
|
public boolean isAuthorized(String token) {
|
||||||
|
UserInfo userInfo = getUserInfo(token);
|
||||||
|
if (userInfo != null ) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
log.debug(" User has no Valid UserInfo");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserInfoUrl() {
|
||||||
|
return userInfoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOriginServer() {
|
||||||
|
return originServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserInfoUrl(String userInfoUrl) {
|
||||||
|
this.userInfoUrl = userInfoUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOriginServer(String originServer) {
|
||||||
|
this.originServer = originServer;
|
||||||
|
}
|
||||||
|
// private boolean hasRole(List<String> givenRoles, List<String> authorizedRoles) {
|
||||||
|
// log.debug("It's registered with role " + givenRoles);
|
||||||
|
// for (String gRole : givenRoles) {
|
||||||
|
// if (authorizedRoles.indexOf(gRole) != -1) {
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// log.debug("Not Authorized. Authorized roles are" + authorizedRoles);
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// private boolean isCommunityManager(String community, String email) {
|
||||||
|
//
|
||||||
|
// CommunityInfo communityInfo = getCommunityInfo(community);
|
||||||
|
// if(communityInfo != null && communityInfo.getManagers() != null ) {
|
||||||
|
//
|
||||||
|
// for (int i = 0; i < communityInfo.getManagers().size(); i++) {
|
||||||
|
// String manager = communityInfo.getManagers().get(i);
|
||||||
|
// log.debug("Community manager: "+manager);
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// private CommunityInfo getCommunityInfo(String community) {
|
||||||
|
// String url = userInfoUrl + community;
|
||||||
|
// URL obj = null;
|
||||||
|
// String responseStr = null;
|
||||||
|
// log.debug("Community info url is " + url);
|
||||||
|
//
|
||||||
|
// try {
|
||||||
|
// obj = new URL(url);
|
||||||
|
// HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
||||||
|
// log.debug("User info response code is: " + con.getResponseCode());
|
||||||
|
// if (con.getResponseCode() != 200) {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
|
||||||
|
// StringBuffer response = new StringBuffer();
|
||||||
|
// String inputLine;
|
||||||
|
// while ((inputLine = in.readLine()) != null) {
|
||||||
|
// response.append(inputLine).append("\n");
|
||||||
|
// }
|
||||||
|
// in.close();
|
||||||
|
// responseStr = response.toString();
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// log.error("An error occured while trying to fetch user info ", e);
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// return json2CommunityInfo(community);
|
||||||
|
// }
|
||||||
|
// private CommunityInfo json2CommunityInfo(String json){
|
||||||
|
//
|
||||||
|
// log.debug("Try to create CommunityInfo class from json: "+json);
|
||||||
|
// if (json == null){
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// BufferedReader br = new BufferedReader(new StringReader(json));
|
||||||
|
// //convert the json string back to object
|
||||||
|
// Gson gson = new Gson();
|
||||||
|
// CommunityInfo communityInfo = null;
|
||||||
|
// try {
|
||||||
|
// communityInfo = gson.fromJson(br, CommunityInfo.class);
|
||||||
|
// }catch(Exception e){
|
||||||
|
// log.debug("Error in parsing json response. Given json is : "+json, e);
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// log.debug("Original response.........: "+communityInfo.toString());
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// return communityInfo;
|
||||||
|
// }
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.handlers.utils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UserInfo {
|
||||||
|
String name;
|
||||||
|
String email;
|
||||||
|
List<String> edu_person_entitlements = new ArrayList<String>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "UserInfo{" +
|
||||||
|
"name='" + name + '\'' +
|
||||||
|
", email='" + email + '\'' +
|
||||||
|
", edu_person_entitlements=" + edu_person_entitlements +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getEdu_person_entitlements() {
|
||||||
|
return edu_person_entitlements;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEdu_person_entitlements(List<String> edu_person_entitlements) {
|
||||||
|
this.edu_person_entitlements = edu_person_entitlements;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.responses;
|
||||||
|
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
|
||||||
|
public class ExceptionResponse {
|
||||||
|
private HttpStatus status;
|
||||||
|
private String errorCode;
|
||||||
|
private String errorMessage;
|
||||||
|
private String errors;
|
||||||
|
|
||||||
|
public ExceptionResponse() {}
|
||||||
|
|
||||||
|
public HttpStatus getStatus() { return status; }
|
||||||
|
|
||||||
|
public void setStatus(HttpStatus status) { this.status = status; }
|
||||||
|
|
||||||
|
public String getErrorCode() {
|
||||||
|
return errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorCode(String errorCode) {
|
||||||
|
this.errorCode = errorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErrorMessage() {
|
||||||
|
return errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrorMessage(String errorMessage) {
|
||||||
|
this.errorMessage = errorMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getErrors() {
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setErrors(String errors) {
|
||||||
|
this.errors = errors;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
#mongodb
|
||||||
|
#beta
|
||||||
|
#spring.data.mongodb.host=beta.services.openaire.eu
|
||||||
|
#spring.data.mongodb.port=27017
|
||||||
|
#spring.data.mongodb.database=openairemonitor
|
||||||
|
|
||||||
|
#production
|
||||||
|
#spring.data.mongodb.host=localhost
|
||||||
|
#spring.data.mongodb.port=27017
|
||||||
|
#spring.data.mongodb.database=openairemonitor
|
||||||
|
#spring.data.mongodb.authentication-database=openairemonitor
|
||||||
|
#spring.data.mongodb.username=dnet8480
|
||||||
|
#spring.data.mongodb.password=...
|
||||||
|
|
||||||
|
|
||||||
|
#dev
|
||||||
|
spring.data.mongodb.host=localhost
|
||||||
|
spring.data.mongodb.port=27017
|
||||||
|
spring.data.mongodb.database=openaire_monitor
|
|
@ -0,0 +1,20 @@
|
||||||
|
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/uoa-monitor-service/uoa-monitor-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/uoa-monitor-service/uoa-monitor-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
|
|
@ -0,0 +1,25 @@
|
||||||
|
#dev
|
||||||
|
monitorservice.userInfoUrl = http://scoobydoo.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/users/getUserInfo?accessToken=
|
||||||
|
monitorservice.originServer = .di.uoa.gr
|
||||||
|
monitorservice.host = smtp.gmail.com
|
||||||
|
monitorservice.port = 587
|
||||||
|
monitorservice.auth = true
|
||||||
|
monitorservice.from = openaire.test@gmail.com
|
||||||
|
monitorservice.username = openaire.test@gmail.com
|
||||||
|
monitorservice.password = ...
|
||||||
|
|
||||||
|
#beta
|
||||||
|
#monitorservice.userInfoUrl = https://beta.services.openaire.eu/uoa-user-management/api/users/getUserInfo?accessToken=
|
||||||
|
#monitorservice.originServer = .openaire.eu
|
||||||
|
#monitorservice.host = bwnmail.icm.edu.pl
|
||||||
|
#monitorservice.port = 25
|
||||||
|
#monitorservice.auth = false
|
||||||
|
#monitorservice.username = no-reply@openaire.eu
|
||||||
|
#monitorservice.from = no-reply@beta.openaire.eu
|
||||||
|
#monitorservice.password = ...
|
||||||
|
|
||||||
|
|
||||||
|
#production
|
||||||
|
#monitorservice.userInfoUrl = https://services.openaire.eu/uoa-user-management/api/users/getUserInfo?accessToken=
|
||||||
|
#monitorservice.originServer = .openaire.eu
|
||||||
|
|
Loading…
Reference in New Issue