merged branch aai_roles_new to trunk
This commit is contained in:
parent
25ff488405
commit
e603487103
1
pom.xml
1
pom.xml
|
@ -312,6 +312,7 @@
|
|||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<configuration>
|
||||
|
|
|
@ -42,11 +42,6 @@ public class AaiSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|||
@Value("${webapp.dev.front}")
|
||||
private String webAppFrontEnd;
|
||||
|
||||
private Map<String, String> userRoles = new HashMap<String, String>(){{
|
||||
put("urn:geant:openaire.eu:group:Super+Administrator#aai.openaire.eu", "ROLE_ADMIN");
|
||||
put("urn:geant:openaire.eu:group:Content+Provider+Dashboard+Administrator#aai.openaire.eu","ROLE_PROVIDE_ADMIN");
|
||||
}};
|
||||
|
||||
@Bean
|
||||
@Override
|
||||
public AuthenticationManager authenticationManagerBean() throws Exception {
|
||||
|
@ -54,12 +49,12 @@ public class AaiSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
|
||||
protected void configure(AuthenticationManagerBuilder auth) {
|
||||
auth.authenticationProvider(openIdConnectAuthenticationProvider());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(WebSecurity web) throws Exception {
|
||||
public void configure(WebSecurity web) {
|
||||
web.ignoring().antMatchers("/stats/**");
|
||||
}
|
||||
|
||||
|
@ -70,33 +65,33 @@ public class AaiSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|||
.authorizeRequests()
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.httpBasic()
|
||||
.authenticationEntryPoint(authenticationEntryPoint())
|
||||
.httpBasic()
|
||||
.authenticationEntryPoint(authenticationEntryPoint())
|
||||
.and()
|
||||
.logout().logoutUrl("/openid_logout")
|
||||
.invalidateHttpSession(true)
|
||||
.deleteCookies("openAIRESession")
|
||||
.logoutSuccessUrl(logoutSuccessUrl)
|
||||
.logout().logoutUrl("/openid_logout")
|
||||
.invalidateHttpSession(true)
|
||||
.deleteCookies("openAIRESession")
|
||||
.logoutSuccessUrl(logoutSuccessUrl)
|
||||
.and()
|
||||
.addFilterBefore(openIdConnectAuthenticationFilter(), AbstractPreAuthenticatedProcessingFilter.class)
|
||||
.addFilterBefore(openIdConnectAuthenticationFilter(), AbstractPreAuthenticatedProcessingFilter.class)
|
||||
;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public OIDCAuthenticationProvider openIdConnectAuthenticationProvider(){
|
||||
public OIDCAuthenticationProvider openIdConnectAuthenticationProvider() {
|
||||
OIDCAuthenticationProvider oidcProvider = new OIDCAuthenticationProvider();
|
||||
oidcProvider.setAuthoritiesMapper(authoritiesMapper());
|
||||
return oidcProvider;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public OpenAireProviderAuthoritiesMapper authoritiesMapper(){
|
||||
OpenAireProviderAuthoritiesMapper authoritiesMapper = new OpenAireProviderAuthoritiesMapper(userRoles);
|
||||
public OpenAIREAuthoritiesMapper authoritiesMapper() {
|
||||
OpenAIREAuthoritiesMapper authoritiesMapper = new OpenAIREAuthoritiesMapper();
|
||||
return authoritiesMapper;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public StaticServerConfigurationService staticServerConfigurationService(){
|
||||
public StaticServerConfigurationService staticServerConfigurationService() {
|
||||
StaticServerConfigurationService staticServerConfigurationService = new StaticServerConfigurationService();
|
||||
Map<String, ServerConfiguration> servers = new HashMap<>();
|
||||
servers.put(oidcIssuer, serverConfiguration());
|
||||
|
@ -105,49 +100,49 @@ public class AaiSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|||
}
|
||||
|
||||
@Bean
|
||||
public StaticClientConfigurationService staticClientConfigurationService(){
|
||||
public StaticClientConfigurationService staticClientConfigurationService() {
|
||||
StaticClientConfigurationService staticClientConfigurationService = new StaticClientConfigurationService();
|
||||
Map<String, RegisteredClient> clients = new HashMap<>();
|
||||
clients.put(oidcIssuer,registeredClient());
|
||||
clients.put(oidcIssuer, registeredClient());
|
||||
staticClientConfigurationService.setClients(clients);
|
||||
return staticClientConfigurationService;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public RegisteredClient registeredClient(){
|
||||
public RegisteredClient registeredClient() {
|
||||
RegisteredClient registeredClient = new RegisteredClient();
|
||||
registeredClient.setClientId(oidcId);
|
||||
registeredClient.setClientSecret(oidcSecret);
|
||||
registeredClient.setScope(new HashSet<>(Arrays.asList("openid","eduperson_entitlement","profile", "email")));
|
||||
registeredClient.setScope(new HashSet<>(Arrays.asList("openid", "eduperson_entitlement", "profile", "email")));
|
||||
registeredClient.setTokenEndpointAuthMethod(AuthMethod.SECRET_BASIC);
|
||||
registeredClient.setRedirectUris(new HashSet<>(Collections.singletonList(oidcDevHome)));
|
||||
return registeredClient;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public StaticAuthRequestOptionsService staticAuthRequestOptionsService(){
|
||||
public StaticAuthRequestOptionsService staticAuthRequestOptionsService() {
|
||||
return new StaticAuthRequestOptionsService();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public PlainAuthRequestUrlBuilder plainAuthRequestUrlBuilder(){
|
||||
public PlainAuthRequestUrlBuilder plainAuthRequestUrlBuilder() {
|
||||
return new PlainAuthRequestUrlBuilder();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerConfiguration serverConfiguration(){
|
||||
public ServerConfiguration serverConfiguration() {
|
||||
ServerConfiguration serverConfiguration = new ServerConfiguration();
|
||||
serverConfiguration.setIssuer(oidcIssuer);
|
||||
serverConfiguration.setAuthorizationEndpointUri(oidcIssuer+"authorize");
|
||||
serverConfiguration.setTokenEndpointUri(oidcIssuer+"token");
|
||||
serverConfiguration.setUserInfoUri(oidcIssuer+"userinfo");
|
||||
serverConfiguration.setJwksUri(oidcIssuer+"jwk");
|
||||
serverConfiguration.setRevocationEndpointUri(oidcIssuer+"revoke");
|
||||
serverConfiguration.setAuthorizationEndpointUri(oidcIssuer + "authorize");
|
||||
serverConfiguration.setTokenEndpointUri(oidcIssuer + "token");
|
||||
serverConfiguration.setUserInfoUri(oidcIssuer + "userinfo");
|
||||
serverConfiguration.setJwksUri(oidcIssuer + "jwk");
|
||||
serverConfiguration.setRevocationEndpointUri(oidcIssuer + "revoke");
|
||||
return serverConfiguration;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LoginUrlAuthenticationEntryPoint authenticationEntryPoint(){
|
||||
public LoginUrlAuthenticationEntryPoint authenticationEntryPoint() {
|
||||
return new LoginUrlAuthenticationEntryPoint("/openid_connect_login");
|
||||
}
|
||||
|
||||
|
@ -166,14 +161,14 @@ public class AaiSecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|||
}
|
||||
|
||||
@Bean
|
||||
public StaticSingleIssuerService staticSingleIssuerService(){
|
||||
public StaticSingleIssuerService staticSingleIssuerService() {
|
||||
StaticSingleIssuerService staticSingleIssuerService = new StaticSingleIssuerService();
|
||||
staticSingleIssuerService.setIssuer(oidcIssuer);
|
||||
return staticSingleIssuerService;
|
||||
}
|
||||
|
||||
@Bean(initMethod = "init")
|
||||
public FrontEndLinkURIAuthenticationSuccessHandler frontEndRedirect(){
|
||||
public FrontEndLinkURIAuthenticationSuccessHandler frontEndRedirect() {
|
||||
FrontEndLinkURIAuthenticationSuccessHandler frontEnd = new FrontEndLinkURIAuthenticationSuccessHandler();
|
||||
frontEnd.setFrontEndURI(webAppFrontEnd);
|
||||
return frontEnd;
|
||||
|
|
|
@ -1,19 +1,22 @@
|
|||
package eu.dnetlib.repo.manager.config;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
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;
|
||||
import org.springframework.session.FindByIndexNameSessionRepository;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class FrontEndLinkURIAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
|
||||
|
||||
|
@ -22,7 +25,7 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati
|
|||
private static final Logger LOGGER = Logger
|
||||
.getLogger(FrontEndLinkURIAuthenticationSuccessHandler.class);
|
||||
|
||||
public void init(){
|
||||
public void init() {
|
||||
LOGGER.debug("Front end uri : " + frontEndURI);
|
||||
}
|
||||
|
||||
|
@ -32,53 +35,22 @@ public class FrontEndLinkURIAuthenticationSuccessHandler implements Authenticati
|
|||
|
||||
@Override
|
||||
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
|
||||
|
||||
OIDCAuthenticationToken authOIDC = (OIDCAuthenticationToken) authentication;
|
||||
JsonObject userInfo = new JsonObject();
|
||||
|
||||
if (authOIDC.getUserInfo().getSub() == null)
|
||||
userInfo.addProperty("sub", "");
|
||||
else
|
||||
userInfo.addProperty("sub", URLEncoder.encode(authOIDC.getUserInfo().getSub(), "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", "");
|
||||
else
|
||||
userInfo.addProperty("firstname", URLEncoder.encode(authOIDC.getUserInfo().getGivenName(), "UTF-8") + "");
|
||||
|
||||
if (authOIDC.getUserInfo().getFamilyName() == null)
|
||||
userInfo.addProperty("lastname", "");
|
||||
else
|
||||
userInfo.addProperty("lastname", URLEncoder.encode(authOIDC.getUserInfo().getFamilyName(), "UTF-8") + "");
|
||||
|
||||
userInfo.addProperty("email", authOIDC.getUserInfo().getEmail() + "");
|
||||
if (authOIDC.getUserInfo().getSource().getAsJsonArray("edu_person_entitlements") == null)
|
||||
userInfo.addProperty("role", "");
|
||||
else
|
||||
userInfo.addProperty("role", URLEncoder.encode(authOIDC.getUserInfo()
|
||||
.getSource().getAsJsonArray("edu_person_entitlements").toString(), "UTF-8") + "");
|
||||
|
||||
|
||||
Cookie openAIREUser = new Cookie("openAIREUser", new Gson().toJson(userInfo) );
|
||||
openAIREUser.setMaxAge(14400);
|
||||
openAIREUser.setPath("/");
|
||||
if(aai_mode.equalsIgnoreCase("production") || aai_mode.equalsIgnoreCase("beta"))
|
||||
openAIREUser .setDomain(".openaire.eu");
|
||||
// openAIREUser.setDomain(".athenarc.gr");
|
||||
response.addCookie(openAIREUser);
|
||||
|
||||
request.getSession().setAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, authOIDC.getUserInfo().getEmail());
|
||||
|
||||
Cookie accessToken = new Cookie("AccessToken", authOIDC.getAccessTokenValue());
|
||||
accessToken.setMaxAge(14400);
|
||||
if(aai_mode.equalsIgnoreCase("production") || aai_mode.equalsIgnoreCase("beta"))
|
||||
String regex = "^([A-Za-z0-9-_=]+)\\.([A-Za-z0-9-_=]+)\\.?([A-Za-z0-9-_.+=]*)$";
|
||||
Matcher matcher = Pattern.compile(regex).matcher(authOIDC.getAccessTokenValue());
|
||||
if (matcher.find()) {
|
||||
long exp = new JsonParser().parse(new String(Base64.getDecoder().decode(matcher.group(2)))).getAsJsonObject().get("exp").getAsLong();
|
||||
accessToken.setMaxAge((int) (exp - (new Date().getTime() / 1000)));
|
||||
} else {
|
||||
accessToken.setMaxAge(3600);
|
||||
}
|
||||
if (aai_mode.equalsIgnoreCase("production") || aai_mode.equalsIgnoreCase("beta"))
|
||||
accessToken.setDomain(".openaire.eu");
|
||||
accessToken.setPath("/");
|
||||
|
||||
// accessToken.setDomain(".athenarc.gr");
|
||||
response.addCookie(accessToken);
|
||||
response.sendRedirect(frontEndURI);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
package eu.dnetlib.repo.manager.config;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.nimbusds.jwt.JWT;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthoritiesMapper;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mitre.openid.connect.client.OIDCAuthoritiesMapper;
|
||||
import org.mitre.openid.connect.model.UserInfo;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ComponentScan
|
||||
@Component
|
||||
public class OpenAIREAuthoritiesMapper implements OIDCAuthoritiesMapper {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(OpenAIREAuthoritiesMapper.class);
|
||||
|
||||
@Value("${services.repo-manager.adminEmail}")
|
||||
String adminEmail;
|
||||
|
||||
@Override
|
||||
public Collection<? extends GrantedAuthority> mapAuthorities(JWT jwtToken, UserInfo userInfo) {
|
||||
JsonArray entitlements = null;
|
||||
Set<GrantedAuthority> authorities = new HashSet<>();
|
||||
if (userInfo != null && userInfo.getSource() != null) {
|
||||
if (userInfo.getSource().getAsJsonArray("edu_person_entitlements") != null) {
|
||||
entitlements = userInfo.getSource().getAsJsonArray("edu_person_entitlements");
|
||||
} else if (userInfo.getSource().getAsJsonArray("eduperson_entitlement") != null) {
|
||||
entitlements = userInfo.getSource().getAsJsonArray("eduperson_entitlement");
|
||||
}
|
||||
logger.debug("user info: " + userInfo + "\nentitlements: " + entitlements);
|
||||
|
||||
// FIXME: delete this if statement when super administrators are set
|
||||
if (userInfo.getEmail() != null && userInfo.getEmail().equals(adminEmail)) {
|
||||
authorities.add(new SimpleGrantedAuthority("SUPER_ADMINISTRATOR"));
|
||||
}
|
||||
|
||||
authorities.addAll(AuthoritiesMapper.map(entitlements));
|
||||
}
|
||||
return authorities;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,42 +0,0 @@
|
|||
package eu.dnetlib.repo.manager.config;
|
||||
|
||||
import com.nimbusds.jwt.JWT;
|
||||
import org.mitre.openid.connect.client.OIDCAuthoritiesMapper;
|
||||
import org.mitre.openid.connect.model.UserInfo;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class OpenAireProviderAuthoritiesMapper implements OIDCAuthoritiesMapper {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(OpenAireProviderAuthoritiesMapper.class);
|
||||
|
||||
final private static String ROLE_CLAIMS = "edu_person_entitlements";
|
||||
|
||||
private Map<String,SimpleGrantedAuthority> userRolesMap;
|
||||
|
||||
OpenAireProviderAuthoritiesMapper(Map<String,String> userRoles) {
|
||||
userRolesMap = new HashMap<>();
|
||||
userRoles.forEach((openaireRole, appRole) -> userRolesMap.put(openaireRole, new SimpleGrantedAuthority(appRole)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<? extends GrantedAuthority> mapAuthorities(JWT idToken, UserInfo userInfo) {
|
||||
Set<GrantedAuthority> out = new HashSet<>();
|
||||
out.add(new SimpleGrantedAuthority("ROLE_USER"));
|
||||
|
||||
if(userInfo.getSource().getAsJsonArray(ROLE_CLAIMS) != null) {
|
||||
userInfo.getSource().getAsJsonArray(ROLE_CLAIMS).forEach(role -> {
|
||||
SimpleGrantedAuthority authority = userRolesMap.get(role.getAsString());
|
||||
if (authority != null) {
|
||||
logger.debug("Role mapped " + role);
|
||||
out.add(authority);
|
||||
}
|
||||
});
|
||||
}
|
||||
return out;
|
||||
}
|
||||
}
|
|
@ -30,7 +30,7 @@ public class BrokerController{
|
|||
@RequestMapping(value = "/getDatasourcesOfUser" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public DatasourcesBroker getDatasourcesOfUser(
|
||||
@RequestParam("includeShared")
|
||||
@ApiParam(value = "Include shared datasources", required = true , defaultValue = "false") String includeShared,
|
||||
|
@ -51,7 +51,7 @@ public class BrokerController{
|
|||
method = RequestMethod.POST,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public EventsPage advancedShowEvents(@PathVariable("page") String page,
|
||||
@PathVariable("size") String size,
|
||||
@RequestBody AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException{
|
||||
|
@ -62,7 +62,7 @@ public class BrokerController{
|
|||
method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public EventsPage showEvents(@RequestParam("datasourceName") String datasourceName,
|
||||
@RequestParam("topic") String topic,
|
||||
@RequestParam("page") String page,
|
||||
|
@ -74,7 +74,7 @@ public class BrokerController{
|
|||
method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public Map<String, List<SimpleSubscriptionDesc>> getSimpleSubscriptionsOfUser() throws BrokerException{
|
||||
return brokerService.getSimpleSubscriptionsOfUser(((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail());
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ public class BrokerController{
|
|||
consumes = MediaType.APPLICATION_JSON_VALUE,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER') ")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER') ")
|
||||
public Subscription subscribe(@RequestBody OpenaireSubscription obj) throws BrokerException{
|
||||
return brokerService.subscribe(obj);
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ public class BrokerController{
|
|||
consumes = MediaType.APPLICATION_JSON_VALUE,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public ResponseEntity<Object> unsubscribe(@PathVariable("subscriptionId") String subscriptionId) throws BrokerException{
|
||||
return brokerService.unsubscribe(subscriptionId);
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ public class BrokerController{
|
|||
@RequestMapping(value = "/getSubscription/{subscriptionId}" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public Subscription getSubscription(@PathVariable("subscriptionId") String subscriptionId) throws BrokerException{
|
||||
return brokerService.getSubscription(subscriptionId);
|
||||
}
|
||||
|
@ -116,7 +116,7 @@ public class BrokerController{
|
|||
@RequestMapping(value = "/getNotificationsBySubscriptionId/{subscriptionId}/{page}/{size}" , method = RequestMethod.GET
|
||||
,produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public EventsPage getNotificationsBySubscriptionId(@PathVariable("subscriptionId") String subscriptionId,
|
||||
@PathVariable("page") String page,
|
||||
@PathVariable("size") String size) throws BrokerException{
|
||||
|
|
|
@ -36,7 +36,7 @@ public class DashboardController {
|
|||
@RequestMapping(value = "/getRepositoriesSummary/{page}/{size}" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public List<RepositorySummaryInfo> getRepositoriesSummaryInfo(
|
||||
@PathVariable("page") String page,
|
||||
@PathVariable("size") String size) throws JSONException {
|
||||
|
@ -46,7 +46,7 @@ public class DashboardController {
|
|||
@RequestMapping(value = "/collectionMonitorSummary/{repoId}" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public CollectionMonitorSummary getCollectionMonitorSummary(
|
||||
@PathVariable("repoId") String repoId,
|
||||
@RequestParam(name = "size", required = false, defaultValue = "20") int size) throws JSONException {
|
||||
|
@ -72,7 +72,7 @@ public class DashboardController {
|
|||
@RequestMapping(value = "/usageSummary/{repoId}" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public UsageSummary getUsageSummary(
|
||||
@PathVariable("repoId") String repoId
|
||||
) throws RepositoryServiceException {
|
||||
|
@ -82,7 +82,7 @@ public class DashboardController {
|
|||
@RequestMapping(value = "/brokerSummary/{ds_name}" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public BrokerSummary getBrokerSummary(
|
||||
@PathVariable("ds_name") String datasourceName) throws BrokerException {
|
||||
return new BrokerSummary(brokerService.getSimpleSubscriptionsOfUser( ((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail()), brokerService.getTopicsForDatasource(datasourceName));
|
||||
|
|
|
@ -29,7 +29,7 @@ public class MonitorController {
|
|||
@RequestMapping(value = "/getJobsOfUser" , method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public JobsOfUser getJobsOfUser(@RequestParam(value = "jobType", required = false)
|
||||
@ApiParam(value = "Equals to filter job type on validation history page") String jobType,
|
||||
@RequestParam("offset") @ApiParam(value = "Page number", required = true) String offset,
|
||||
|
@ -43,7 +43,7 @@ public class MonitorController {
|
|||
|
||||
@RequestMapping(value = "/getJobsOfUserPerValidationStatus" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public int getJobsOfUserPerValidationStatus(@RequestBody String jobType,
|
||||
@RequestBody String validationStatus) throws JSONException {
|
||||
return monitorService.getJobsOfUserPerValidationStatus(((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail(), jobType, validationStatus);
|
||||
|
|
|
@ -6,7 +6,6 @@ import eu.dnetlib.repo.manager.domain.OrderByType;
|
|||
import eu.dnetlib.repo.manager.domain.Paging;
|
||||
import eu.dnetlib.repo.manager.domain.RepositoryServiceException;
|
||||
import eu.dnetlib.repo.manager.service.PiWikServiceImpl;
|
||||
import eu.dnetlib.repo.manager.service.RepositoryService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
|
@ -40,19 +39,15 @@ public class PiWikController {
|
|||
@Autowired
|
||||
private PiWikServiceImpl piWikService;
|
||||
|
||||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
|
||||
|
||||
@RequestMapping(value = "/getPiwikSiteForRepo/{repositoryId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((@repositoryService.getRepositoryById(#repositoryId).registeredBy==authentication.userInfo.email or @repositoryService.getRepositoryById(#repositoryId).registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
@PreAuthorize("hasAnyRole('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#repositoryId) or (@repositoryService.getRepositoryById(#repositoryId).registeredBy=='null' and hasAuthority('REGISTERED_USER'))")
|
||||
public PiwikInfo getPiwikSiteForRepo(@PathVariable("repositoryId") String repositoryId) {
|
||||
return piWikService.getPiwikSiteForRepo(repositoryId);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/savePiwikInfo" , method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((@repositoryService.getRepositoryById(#piwikInfo.repositoryId).registeredBy==authentication.userInfo.email or @repositoryService.getRepositoryById(#piwikInfo.repositoryId).registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
@PreAuthorize("hasAnyRole('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#piwikInfo.repositoryId) or (@repositoryService.getRepositoryById(#piwikInfo.repositoryId).registeredBy=='null' and hasAuthority('REGISTERED_USER'))")
|
||||
public PiwikInfo savePiwikInfo(@RequestBody PiwikInfo piwikInfo) {
|
||||
return piWikService.savePiwikInfo(piwikInfo);
|
||||
}
|
||||
|
@ -154,14 +149,14 @@ public class PiWikController {
|
|||
|
||||
@RequestMapping(value = "/approvePiwikSite/{repositoryId}" , method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN')")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public ResponseEntity<Object> approvePiwikSite(@PathVariable("repositoryId") String repositoryId) {
|
||||
return piWikService.approvePiwikSite(repositoryId);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getOpenaireId/{repositoryId}" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((@repositoryService.getRepositoryById(#repositoryId).registeredBy==authentication.userInfo.email or @repositoryService.getRepositoryById(#repositoryId).registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
@PreAuthorize("hasAnyRole('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#repositoryId) or (@repositoryService.getRepositoryById(#repositoryId).registeredBy=='null' and hasAuthority('REGISTERED_USER'))")
|
||||
public String getOpenaireId(@PathVariable("repositoryId") String repositoryId){
|
||||
return piWikService.getOpenaireId(repositoryId);
|
||||
}
|
||||
|
@ -169,14 +164,14 @@ public class PiWikController {
|
|||
@RequestMapping(value = "/markPiwikSiteAsValidated/{repositoryId}" , method = RequestMethod.POST,
|
||||
consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN')")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public ResponseEntity<Object> markPiwikSiteAsValidated(@PathVariable("repositoryId") String repositoryId) throws RepositoryServiceException {
|
||||
return piWikService.markPiwikSiteAsValidated(repositoryId);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/enableMetricsForRepository", method = RequestMethod.POST,
|
||||
consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or (hasAuthority('REGISTERED_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
|
||||
public PiwikInfo enableMetricsForRepository(@RequestParam("officialName") String officialName,
|
||||
@RequestParam("repoWebsite") String repoWebsite,
|
||||
@RequestBody PiwikInfo piwikInfo) throws RepositoryServiceException {
|
||||
|
|
|
@ -3,35 +3,48 @@ package eu.dnetlib.repo.manager.controllers;
|
|||
import eu.dnetlib.domain.data.Repository;
|
||||
import eu.dnetlib.domain.data.RepositoryInterface;
|
||||
import eu.dnetlib.repo.manager.domain.*;
|
||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||
import eu.dnetlib.repo.manager.service.RepositoryServiceImpl;
|
||||
import eu.dnetlib.repo.manager.service.RepositoryService;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthorizationService;
|
||||
import eu.dnetlib.repo.manager.utils.JsonUtils;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.json.JSONException;
|
||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PostAuthorize;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping(value = "/repository")
|
||||
@Api(description = "Repository API", tags = {"repository"})
|
||||
@RequestMapping(value = "/repositories")
|
||||
@Api(description = "Repository API", tags = {"repositories"})
|
||||
public class RepositoryController {
|
||||
|
||||
private static Logger logger = Logger.getLogger(RepositoryController.class);
|
||||
private static final Logger logger = Logger.getLogger(RepositoryController.class);
|
||||
|
||||
private final RepositoryService repositoryService;
|
||||
private final AuthorizationService authorizationService;
|
||||
|
||||
@Autowired
|
||||
private RepositoryServiceImpl repositoryService;
|
||||
RepositoryController(RepositoryService repositoryService,
|
||||
AuthorizationService authorizationService) {
|
||||
this.repositoryService = repositoryService;
|
||||
this.authorizationService = authorizationService;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getCountries", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@RequestMapping(value = "/countries", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public Country[] getCountries() {
|
||||
return repositoryService.getCountries();
|
||||
|
@ -42,28 +55,26 @@ public class RepositoryController {
|
|||
@ResponseBody
|
||||
public List<RepositorySnippet> getRepositoriesByCountry(@PathVariable("country") String country,
|
||||
@PathVariable("mode") String mode,
|
||||
@RequestParam(value = "managed",required=false) Boolean managed) throws JSONException, IOException {
|
||||
@RequestParam(value = "managed", required = false) Boolean managed) throws JSONException, IOException {
|
||||
return repositoryService.getRepositoriesByCountry(country, mode, managed);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getRepositoriesOfUser/{page}/{size}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/snippets/user", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
public List<RepositorySnippet> getRepositoriesOfUser(
|
||||
@PathVariable("page") String page,
|
||||
@PathVariable("size") String size) throws JSONException, IOException {
|
||||
return repositoryService.getRepositoriesSnippetOfUser(((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail(), page, size);
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public List<RepositorySnippet> getRepositoriesSnippetsOfUser() throws Exception {
|
||||
return repositoryService.getRepositoriesSnippetsOfUser("0", "100");
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/searchRegisteredRepositories/{page}/{size}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/searchRegisteredRepositories/{page}/{size}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN')")
|
||||
public List<RepositorySnippet> searchRegisteredRepositories(@RequestParam(name="country", required=false) String country,
|
||||
@RequestParam(name="typology", required=false) String typology,
|
||||
@RequestParam(name="englishName", required=false) String englishName,
|
||||
@RequestParam(name="officialName", required=false) String officialName,
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public List<RepositorySnippet> searchRegisteredRepositories(@RequestParam(name = "country", required = false) String country,
|
||||
@RequestParam(name = "typology", required = false) String typology,
|
||||
@RequestParam(name = "englishName", required = false) String englishName,
|
||||
@RequestParam(name = "officialName", required = false) String officialName,
|
||||
@RequestParam("requestSortBy") String requestSortBy,
|
||||
@RequestParam("order") String order,
|
||||
@PathVariable("page") int page,
|
||||
|
@ -75,14 +86,14 @@ public class RepositoryController {
|
|||
@RequestMapping(value = "/getRepositoryById/{id}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PostAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((returnObject.registeredBy=='null' or returnObject.registeredBy==authentication.userInfo.email) and hasRole('ROLE_USER'))")
|
||||
public Repository getRepositoryById(@PathVariable("id") String id) throws JSONException,ResourceNotFoundException {
|
||||
@PostAuthorize("hasAnyRole('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id) or (returnObject.registeredBy=='null' and hasAuthority('REGISTERED_USER'))")
|
||||
public Repository getRepositoryById(@PathVariable("id") String id) throws JSONException, ResourceNotFoundException {
|
||||
Repository repo = repositoryService.getRepositoryById(id);
|
||||
|
||||
if (repo != null)
|
||||
logger.info("Returning repository " + repo.getId() + " registered by " + repo.getRegisteredBy());
|
||||
else
|
||||
logger.info("Requested repository " + id + " not found");
|
||||
if (repo != null)
|
||||
logger.info("Returning repository " + repo.getId() + " registered by " + repo.getRegisteredBy());
|
||||
else
|
||||
logger.info("Requested repository " + id + " not found");
|
||||
return repo;
|
||||
}
|
||||
|
||||
|
@ -90,7 +101,7 @@ public class RepositoryController {
|
|||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public List<AggregationDetails> getRepositoryAggregations(@PathVariable("id") String id) throws JSONException {
|
||||
return repositoryService.getRepositoryAggregations(id,0,20);
|
||||
return repositoryService.getRepositoryAggregations(id, 0, 20);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getRepositoryAggregationsByYear/{id}", method = RequestMethod.GET,
|
||||
|
@ -112,7 +123,7 @@ public class RepositoryController {
|
|||
@RequestMapping(value = "/getRepositoryInterface/{id}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PostAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((@repositoryService.getRepositoryById(#id).registeredBy==authentication.userInfo.email or @repositoryService.getRepositoryById(#id).registeredBy=='null' ) and hasRole('ROLE_USER'))")
|
||||
@PostAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id) or (@repositoryService.getRepositoryById(#id).registeredBy=='null' and hasAuthority('REGISTERED_USER'))")
|
||||
public List<RepositoryInterface> getRepositoryInterface(@PathVariable("id") String id) throws JSONException {
|
||||
return repositoryService.getRepositoryInterface(id);
|
||||
}
|
||||
|
@ -120,7 +131,8 @@ public class RepositoryController {
|
|||
@RequestMapping(value = "/addRepository", method = RequestMethod.POST,
|
||||
consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((#repository.registeredBy==authentication.userInfo.email or returnObject.registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
// @PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or (hasAuthority(@authorizationService.convertRepoIdToRoleId(#repository.id)) or hasAuthority(@authorizationService.convertRepoIdToRoleId(returnObject.id)))")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or hasAuthority('REGISTERED_USER')")
|
||||
public Repository addRepository(@RequestParam("datatype") String datatype,
|
||||
@RequestBody Repository repository) throws Exception {
|
||||
|
||||
|
@ -130,105 +142,136 @@ public class RepositoryController {
|
|||
@RequestMapping(value = "/getDnetCountries", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public List<String> getDnetCountries(){
|
||||
public List<String> getDnetCountries() {
|
||||
return repositoryService.getDnetCountries();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getTypologies", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public List<String> getTypologies(){
|
||||
public List<String> getTypologies() {
|
||||
return repositoryService.getTypologies();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getTimezones", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public List<Timezone> getTimezones(){
|
||||
public List<Timezone> getTimezones() {
|
||||
return repositoryService.getTimezones();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/updateRepository", method = RequestMethod.POST,
|
||||
consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((#repository.registeredBy==authentication.userInfo.email or #repository.registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
public Repository updateRepository(@RequestBody Repository repository,Authentication authentication) throws Exception {
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#repository.id)")
|
||||
public Repository updateRepository(@RequestBody Repository repository, Authentication authentication) throws Exception {
|
||||
return repositoryService.updateRepository(repository, authentication);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/deleteInterface/", method = RequestMethod.DELETE)
|
||||
@PreAuthorize("hasRole('ROLE_USER') and #registeredBy == authentication.userInfo.email")
|
||||
public void deleteRepositoryInterface(@RequestParam("id") String id ,
|
||||
@RequestParam("registeredBy") String registeredBy){
|
||||
@PreAuthorize("@authorizationService.isMemberOf(#id)")
|
||||
public void deleteRepositoryInterface(@RequestParam("id") String id,
|
||||
@RequestParam("registeredBy") String registeredBy) {
|
||||
repositoryService.deleteRepositoryInterface(id, registeredBy);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/addInterface", method = RequestMethod.POST,
|
||||
consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((@repositoryService.getRepositoryById(#repoId).registeredBy==authentication.userInfo.email or @repositoryService.getRepositoryById(#repoId).registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id)")
|
||||
public RepositoryInterface addRepositoryInterface(@RequestParam("datatype") String datatype,
|
||||
@RequestParam("repoId") String repoId,
|
||||
@RequestParam("id") String id,
|
||||
@RequestParam("registeredBy") String registeredBy,
|
||||
@RequestParam(value = "comment", required = false) String comment,
|
||||
@RequestBody RepositoryInterface repositoryInterface) throws Exception {
|
||||
return repositoryService.addRepositoryInterface(datatype, repoId, registeredBy, comment, repositoryInterface);
|
||||
return repositoryService.addRepositoryInterface(datatype, id, registeredBy, comment, repositoryInterface);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getUrlsOfUserRepos/{page}/{size}/",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/getUrlsOfUserRepos/{page}/{size}/", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
public List<String> getUrlsOfUserRepos(
|
||||
@PathVariable("page") String page,
|
||||
@PathVariable("size") String size) throws JSONException {
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public List<String> getUrlsOfUserRepos(@PathVariable("page") String page, @PathVariable("size") String size) {
|
||||
return repositoryService.getUrlsOfUserRepos(((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail(), page, size);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getDatasourceVocabularies/{mode}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/getDatasourceVocabularies/{mode}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public List<String> getDatasourceVocabularies(@PathVariable("mode") String mode) {
|
||||
return repositoryService.getDatasourceVocabularies(mode);
|
||||
return repositoryService.getDatasourceVocabularies(mode);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getCompatibilityClasses/{mode}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/getCompatibilityClasses/{mode}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public Map<String, String> getCompatibilityClasses(@PathVariable("mode") String mode) {
|
||||
public Map<String, String> getCompatibilityClasses(@PathVariable("mode") String mode) {
|
||||
|
||||
return repositoryService.getCompatibilityClasses(mode);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getDatasourceClasses/{mode}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/getDatasourceClasses/{mode}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public Map<String, String> getDatasourceClasses(@PathVariable("mode") String mode) {
|
||||
return repositoryService.getDatasourceClasses(mode);
|
||||
public Map<String, String> getDatasourceClasses(@PathVariable("mode") String mode) {
|
||||
return repositoryService.getDatasourceClasses(mode);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getMetricsInfoForRepository/{repoId}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/getMetricsInfoForRepository/{id}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public MetricsInfo getMetricsInfoForRepository(@PathVariable("repoId") String repoId) throws RepositoryServiceException {
|
||||
return repositoryService.getMetricsInfoForRepository(repoId);
|
||||
public MetricsInfo getMetricsInfoForRepository(@PathVariable("id") String id) throws RepositoryServiceException {
|
||||
return repositoryService.getMetricsInfoForRepository(id);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getListLatestUpdate/{mode}",method = RequestMethod.GET,
|
||||
@RequestMapping(value = "/getListLatestUpdate/{mode}", method = RequestMethod.GET,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public Map<String, String> getListLatestUpdate(@PathVariable("mode") String mode) throws JSONException {
|
||||
public Map<String, String> getListLatestUpdate(@PathVariable("mode") String mode) throws JSONException {
|
||||
return repositoryService.getListLatestUpdate(mode);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/updateRepositoryInterface", method = RequestMethod.POST,
|
||||
consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or ((@repositoryService.getRepositoryById(#repoId).registeredBy==authentication.userInfo.email or @repositoryService.getRepositoryById(#repoId).registeredBy=='null') and hasRole('ROLE_USER'))")
|
||||
public RepositoryInterface updateRepositoryInterface(@RequestParam("repoId") String repoId,
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id)")
|
||||
public RepositoryInterface updateRepositoryInterface(@RequestParam("id") String id,
|
||||
@RequestParam("registeredBy") String registeredBy,
|
||||
@RequestParam(value = "comment", required = false) String comment,
|
||||
@RequestBody RepositoryInterface repositoryInterface) throws Exception {
|
||||
return repositoryService.updateRepositoryInterface(repoId, registeredBy, comment, repositoryInterface);
|
||||
return repositoryService.updateRepositoryInterface(id, registeredBy, comment, repositoryInterface);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Get all the admins of the repository
|
||||
*/
|
||||
@RequestMapping(method = RequestMethod.GET, path = "{id}/admins")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id)")
|
||||
public ResponseEntity<List<User>> getAdminsOfARepo(@PathVariable("id") String id) {
|
||||
return new ResponseEntity<>(authorizationService.getAdminsOfRepo(id), HttpStatus.OK);
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to repo by email
|
||||
*/
|
||||
@RequestMapping(method = RequestMethod.POST, path = "{id}/admins")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id)")
|
||||
public Response subscribeByEmail(@PathVariable("id") String id, @RequestBody String email) throws ResourceNotFoundException {
|
||||
authorizationService.addAdmin(id, email);
|
||||
return Response.status(HttpStatus.OK.value()).entity(JsonUtils.createResponse("Role has been assigned").toString()).type(javax.ws.rs.core.MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsubscribe from repo by email
|
||||
*/
|
||||
@RequestMapping(method = RequestMethod.DELETE, path = "{id}/admins/{email:.+}")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or @authorizationService.isMemberOf(#id)")
|
||||
public ResponseEntity<Void> unsubscribeByEmail(@PathVariable("id") String id, @PathVariable("email") String email) throws ResourceNotFoundException {
|
||||
authorizationService.removeAdmin(id, email);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ public class SushiliteController {
|
|||
|
||||
@RequestMapping(value = "/getReportResults/{page}/{pageSize}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public ReportResponseWrapper getReportResults(@PathVariable("page") String page,
|
||||
@PathVariable("pageSize") String pageSize,
|
||||
@RequestParam(value = "Report") String Report,
|
||||
|
|
|
@ -18,7 +18,7 @@ public class UserController {
|
|||
private UserServiceImpl userService;
|
||||
|
||||
@RequestMapping(value = "/login" , method = RequestMethod.GET)
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public ResponseEntity<Object> login() {
|
||||
return userService.login();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,110 @@
|
|||
package eu.dnetlib.repo.manager.controllers;
|
||||
|
||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||
import eu.dnetlib.repo.manager.service.aai.registry.AaiRegistryService;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthoritiesUpdater;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthorizationService;
|
||||
import eu.dnetlib.repo.manager.service.security.RoleMappingService;
|
||||
import eu.dnetlib.repo.manager.utils.JsonUtils;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.util.Collection;
|
||||
|
||||
@RestController
|
||||
@RequestMapping(value = "/role-management")
|
||||
@Api(description = "Role Management", value = "role-management")
|
||||
public class UserRoleController {
|
||||
|
||||
private final AaiRegistryService aaiRegistryService;
|
||||
private final AuthoritiesUpdater authoritiesUpdater;
|
||||
private final RoleMappingService roleMappingService;
|
||||
private final AuthorizationService authorizationService;
|
||||
|
||||
@Autowired
|
||||
UserRoleController(AaiRegistryService aaiRegistryService,
|
||||
AuthoritiesUpdater authoritiesUpdater,
|
||||
RoleMappingService roleMappingService,
|
||||
AuthorizationService authorizationService) {
|
||||
this.aaiRegistryService = aaiRegistryService;
|
||||
this.authoritiesUpdater = authoritiesUpdater;
|
||||
this.roleMappingService = roleMappingService;
|
||||
this.authorizationService = authorizationService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the role with the given id.
|
||||
**/
|
||||
@RequestMapping(method = RequestMethod.GET, path = "/role/{id}")
|
||||
// @PreAuthorize("hasAnyAuthority('REGISTERED_USER', 'SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public Response getRole(@RequestParam(value = "type", defaultValue = "datasource") String type, @PathVariable("id") String id) {
|
||||
int roleId = aaiRegistryService.getCouId(type, id);
|
||||
return Response.status(HttpStatus.OK.value()).entity(JsonUtils.createResponse("Role id is: " + roleId).toString()).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new role with the given name and description.
|
||||
**/
|
||||
@RequestMapping(method = RequestMethod.POST, path = "/role")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR')")
|
||||
public Response createRole(@RequestBody Role role) {
|
||||
aaiRegistryService.createRole(role);
|
||||
return Response.status(HttpStatus.OK.value()).entity(JsonUtils.createResponse("Role has been created").toString()).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribe to a type(Community, etc.) with id(ee, egi, etc.)
|
||||
*/
|
||||
@ApiOperation(value = "subscribe")
|
||||
@RequestMapping(method = RequestMethod.POST, path = "/subscribe/{type}/{id}")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public Response subscribe(@PathVariable("type") String type, @PathVariable("id") String id) {
|
||||
Integer coPersonId = aaiRegistryService.getCoPersonIdByIdentifier();
|
||||
if (coPersonId == null) {
|
||||
coPersonId = aaiRegistryService.getCoPersonIdByEmail();
|
||||
}
|
||||
Integer couId = aaiRegistryService.getCouId(type, id);
|
||||
if (couId != null) {
|
||||
Integer role = aaiRegistryService.getRoleId(coPersonId, couId);
|
||||
aaiRegistryService.assignMemberRole(coPersonId, couId, role);
|
||||
|
||||
// Add role to current authorities
|
||||
authoritiesUpdater.addRole(roleMappingService.convertRepoIdToAuthority(id));
|
||||
|
||||
return Response.status(HttpStatus.OK.value()).entity(JsonUtils.createResponse("Role has been assigned").toString()).type(MediaType.APPLICATION_JSON).build();
|
||||
} else {
|
||||
return Response.status(HttpStatus.NOT_FOUND.value()).entity(JsonUtils.createResponse("Role has not been found").toString()).type(MediaType.APPLICATION_JSON).build();
|
||||
}
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, path = "/users/couid/{id}")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public ResponseEntity<String> getUsersByCouId(@PathVariable("id") Integer id) {
|
||||
// calls.getUserByCoId()
|
||||
return ResponseEntity.ok(aaiRegistryService.getUsersByCouId(id).toString());
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, path = "/users/{email}/roles")
|
||||
@PreAuthorize("hasAnyAuthority('SUPER_ADMINISTRATOR', 'CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or hasAuthority('REGISTERED_USER') and authentication.userInfo.email==#email")
|
||||
public ResponseEntity<Collection<String>> getRolesByEmail(@PathVariable("email") String email) {
|
||||
return ResponseEntity.ok(authorizationService.getUserRoles(email));
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, path = "/user/roles/my")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public ResponseEntity<Collection<String>> getRoleNames() {
|
||||
return ResponseEntity.ok(authorizationService.getUserRoles());
|
||||
}
|
||||
|
||||
}
|
|
@ -38,7 +38,7 @@ public class ValidatorController {
|
|||
consumes = MediaType.APPLICATION_JSON_VALUE,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER') and #jobForValidation.userEmail == authentication.userInfo.email")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER') and #jobForValidation.userEmail == authentication.userInfo.email")
|
||||
public JobForValidation submitJobForValidation(@RequestBody JobForValidation jobForValidation) throws ValidatorServiceException {
|
||||
return validatorService.submitJobForValidation(jobForValidation);
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ public class ValidatorController {
|
|||
consumes = MediaType.APPLICATION_JSON_VALUE,
|
||||
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public ResponseEntity<Object> reSubmitJobForValidation(@PathVariable("jobId") String jobId) throws JSONException, ValidatorServiceException {
|
||||
return validatorService.reSubmitJobForValidation(((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail(), jobId);
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ public class ValidatorController {
|
|||
|
||||
@RequestMapping(value = "/getStoredJobsNew" , method = RequestMethod.GET,produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public List<StoredJob> getStoredJobsNew(@RequestParam(value = "jobType", required = false)
|
||||
@ApiParam(value = "Equals to filter job type on validation history page") String jobType,
|
||||
@RequestParam("offset") @ApiParam(value = "Page number", required = true) String offset,
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.util.Date;
|
|||
|
||||
public class RepositorySnippet {
|
||||
|
||||
// Do not refactor names to keep compatibility with external api.
|
||||
private String id;
|
||||
private String officialname;
|
||||
private String englishname;
|
||||
|
@ -24,7 +25,8 @@ public class RepositorySnippet {
|
|||
|
||||
private PiwikInfo piwikInfo;
|
||||
|
||||
public RepositorySnippet() {}
|
||||
public RepositorySnippet() {
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package eu.dnetlib.repo.manager.domain.dto;
|
||||
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
@XmlRootElement
|
||||
public class Role {
|
||||
String name;
|
||||
String description;
|
||||
|
||||
public Role() {}
|
||||
|
||||
public Role(String name, String description) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,61 @@
|
|||
package eu.dnetlib.repo.manager.domain.dto;
|
||||
|
||||
import org.mitre.openid.connect.model.UserInfo;
|
||||
|
||||
public class User {
|
||||
|
||||
private String sub;
|
||||
private String firstName;
|
||||
private String lastName;
|
||||
private String email;
|
||||
|
||||
public User() {}
|
||||
|
||||
public User(String sub, String firstName, String lastName, String email) {
|
||||
this.sub = sub;
|
||||
this.firstName = firstName;
|
||||
this.lastName = lastName;
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public static User from(UserInfo userInfo) {
|
||||
User user = new User();
|
||||
user.setSub(user.getSub());
|
||||
user.setFirstName(userInfo.getGivenName());
|
||||
user.setLastName(userInfo.getFamilyName());
|
||||
user.setEmail(userInfo.getEmail());
|
||||
return user;
|
||||
}
|
||||
|
||||
public String getSub() {
|
||||
return sub;
|
||||
}
|
||||
|
||||
public void setSub(String sub) {
|
||||
this.sub = sub;
|
||||
}
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
}
|
||||
|
||||
public void setFirstName(String firstName) {
|
||||
this.firstName = firstName;
|
||||
}
|
||||
|
||||
public String getLastName() {
|
||||
return lastName;
|
||||
}
|
||||
|
||||
public void setLastName(String lastName) {
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
}
|
|
@ -9,6 +9,10 @@ public class ResourceNotFoundException extends Exception {
|
|||
super("Resource Not Found");
|
||||
}
|
||||
|
||||
public ResourceNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public ResourceNotFoundException(String id, String resourceType) {
|
||||
super(resourceType + " with id " + id + " was not found");
|
||||
}
|
||||
|
|
|
@ -2,12 +2,12 @@ package eu.dnetlib.repo.manager.service;
|
|||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import eu.dnetlib.domain.data.Repository;
|
||||
import eu.dnetlib.repo.manager.domain.BrokerException;
|
||||
import eu.dnetlib.repo.manager.domain.RepositorySnippet;
|
||||
import eu.dnetlib.repo.manager.domain.Term;
|
||||
import eu.dnetlib.repo.manager.domain.Tuple;
|
||||
import eu.dnetlib.repo.manager.domain.broker.*;
|
||||
import org.apache.commons.lang.NotImplementedException;
|
||||
import org.json.JSONException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
@ -44,11 +44,11 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
.getLogger(BrokerServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
RestTemplate restTemplate ;
|
||||
RestTemplate restTemplate;
|
||||
|
||||
private HttpHeaders httpHeaders;
|
||||
|
||||
private HashMap<String,Term> topics = new HashMap<String, Term>();
|
||||
private HashMap<String, Term> topics = new HashMap<String, Term>();
|
||||
|
||||
@Autowired
|
||||
private EmailUtils emailUtils;
|
||||
|
@ -60,29 +60,29 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
httpHeaders.set("Content-Type", "application/json");
|
||||
|
||||
LOGGER.debug("Init dnet topics!");
|
||||
try (InputStream is = new URL(topicsURL).openStream() ){
|
||||
try (InputStream is = new URL(topicsURL).openStream()) {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode root = mapper.readTree(is);
|
||||
for (JsonNode term : root.path("terms") )
|
||||
for (JsonNode term : root.path("terms"))
|
||||
topics.put(term.path("code").textValue(), parseTerm(term));
|
||||
} catch (IOException e) {
|
||||
LOGGER.debug("Exception on initDnetTopicsMap" , e);
|
||||
LOGGER.debug("Exception on initDnetTopicsMap", e);
|
||||
emailUtils.reportException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private Term parseTerm(JsonNode term) {
|
||||
return new Term(term.path("englishName").textValue(),term.path("nativeName").textValue(),
|
||||
term.path("encoding").textValue(),term.path("code").textValue());
|
||||
return new Term(term.path("englishName").textValue(), term.path("nativeName").textValue(),
|
||||
term.path("encoding").textValue(), term.path("code").textValue());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public DatasourcesBroker getDatasourcesOfUser(String user,String includeShared,String includeByOthers) throws JSONException {
|
||||
public DatasourcesBroker getDatasourcesOfUser(String user, String includeShared, String includeByOthers) throws JSONException {
|
||||
long start = System.currentTimeMillis();
|
||||
DatasourcesBroker ret = new DatasourcesBroker();
|
||||
try {
|
||||
ret.setDatasourcesOfUser(getDatasourcesOfUserType(repoAPI.getRepositoriesSnippetOfUser(user,"0","100")));
|
||||
ret.setDatasourcesOfUser(getDatasourcesOfUserType(repoAPI.getRepositoriesSnippetsOfUser(user, "0", "100")));
|
||||
//TODO fix bug when values are true
|
||||
// if (Boolean.parseBoolean(includeShared)) {
|
||||
// List<String> sharedDatasourceIds = new ArrayList<String>();
|
||||
|
@ -92,12 +92,12 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
// if (Boolean.parseBoolean(includeByOthers)) {
|
||||
// ret.setDatasourcesOfOthers(getDatasourcesOfUserType(getRepositoriesOfUser(user)));
|
||||
// }
|
||||
} catch (BrokerException | IOException e) {
|
||||
LOGGER.debug("Exception on getDatasourcesOfUser" , e);
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on getDatasourcesOfUser", e);
|
||||
emailUtils.reportException(e);
|
||||
}
|
||||
long end = System.currentTimeMillis();
|
||||
System.out.println("Getting datasources of user in " + (end-start)+"ms");
|
||||
System.out.println("Getting datasources of user in " + (end - start) + "ms");
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -117,7 +117,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<List<BrowseEntry>>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on getTopicsForDatasource" , e);
|
||||
LOGGER.debug("Exception on getTopicsForDatasource", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -128,7 +128,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
@Override
|
||||
public EventsPage advancedShowEvents(String page,
|
||||
String size,
|
||||
AdvQueryObject advQueryObject) throws BrokerException, JSONException ,IOException {
|
||||
AdvQueryObject advQueryObject) throws BrokerException, JSONException, IOException {
|
||||
|
||||
final String service = "/events/{page}/{pageSize}";
|
||||
|
||||
|
@ -151,7 +151,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
}
|
||||
);
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on advancedShowEvents" , e);
|
||||
LOGGER.debug("Exception on advancedShowEvents", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -183,31 +183,11 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
}
|
||||
});
|
||||
long stop = System.currentTimeMillis();
|
||||
System.out.println("getDatasourcesOfUserType returned in " + (stop-start) + "ms ");
|
||||
System.out.println("getDatasourcesOfUserType returned in " + (stop - start) + "ms ");
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
private List<Repository> getRepositoriesOfUser(String userEmail) throws JSONException {
|
||||
|
||||
int page = 0;
|
||||
int size = 50;
|
||||
List<Repository> rs ;
|
||||
List<Repository> resultSet = new ArrayList<>();
|
||||
|
||||
while (true){
|
||||
rs = repoAPI.getRepositoriesOfUser(userEmail, String.valueOf(page), String.valueOf(size));
|
||||
resultSet.addAll(rs);
|
||||
page+=1;
|
||||
if(rs.size() == 0) break;
|
||||
}
|
||||
return resultSet;
|
||||
}
|
||||
|
||||
private List<Repository> getRepositoriesByIds(List<String> sharedDatasourceIds) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventsPage showEvents(String datasourceName,
|
||||
String topic,
|
||||
|
@ -230,7 +210,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<EventsPage>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on showEvents" , e);
|
||||
LOGGER.debug("Exception on showEvents", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -256,7 +236,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<Map<String, List<SimpleSubscriptionDesc>>>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on getSimpleSubscriptionsOfUser" , e);
|
||||
LOGGER.debug("Exception on getSimpleSubscriptionsOfUser", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -266,8 +246,8 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
@Override
|
||||
public Map<String, List<SimpleSubscriptionDesc>> getSimpleSubscriptionsOfUserByRepoId(String userEmail, String repoId) throws BrokerException {
|
||||
Map<String, List<SimpleSubscriptionDesc>> subscriptionsOfUser = getSimpleSubscriptionsOfUser(userEmail);
|
||||
|
||||
return null;
|
||||
throw new NotImplementedException();
|
||||
// return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -292,7 +272,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<Subscription>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on OpenaireSubscription" , e);
|
||||
LOGGER.debug("Exception on OpenaireSubscription", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -316,15 +296,15 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<Void>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on unsubscribe" , e);
|
||||
LOGGER.debug("Exception on unsubscribe", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
return new ResponseEntity<>("OK",HttpStatus.OK);
|
||||
return new ResponseEntity<>("OK", HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Subscription getSubscription( String subscriptionId) throws BrokerException {
|
||||
public Subscription getSubscription(String subscriptionId) throws BrokerException {
|
||||
final String service = "/subscriptions/" + subscriptionId;
|
||||
|
||||
//build the uri params
|
||||
|
@ -340,7 +320,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<Subscription>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on getSubscription" , e);
|
||||
LOGGER.debug("Exception on getSubscription", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -360,7 +340,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(openairePath + "/notifications/")
|
||||
.path("/{id}/{page}/{size}/")
|
||||
.build().expand(subscriptionId,page, size).encode();
|
||||
.build().expand(subscriptionId, page, size).encode();
|
||||
|
||||
ResponseEntity<EventsPage> resp;
|
||||
try {
|
||||
|
@ -371,7 +351,7 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
new ParameterizedTypeReference<EventsPage>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on getNotificationsBySubscriptionId" , e);
|
||||
LOGGER.debug("Exception on getNotificationsBySubscriptionId", e);
|
||||
emailUtils.reportException(e);
|
||||
throw new BrokerException(e);
|
||||
}
|
||||
|
@ -383,16 +363,16 @@ public class BrokerServiceImpl implements BrokerService {
|
|||
throws BrokerException {
|
||||
|
||||
Map<String, List<SimpleSubscriptionDesc>> simpleSubs = getSimpleSubscriptionsOfUser(userEmail);
|
||||
Map<String,List<Subscription>> subs = new HashMap<>();
|
||||
Map<String, List<Subscription>> subs = new HashMap<>();
|
||||
List<Subscription> subscriptions = null;
|
||||
|
||||
for(String s:simpleSubs.keySet()){
|
||||
for (String s : simpleSubs.keySet()) {
|
||||
List<SimpleSubscriptionDesc> simpleSubscriptionDescs = simpleSubs.get(s);
|
||||
for(SimpleSubscriptionDesc simpleSubscriptionDesc : simpleSubscriptionDescs) {
|
||||
for (SimpleSubscriptionDesc simpleSubscriptionDesc : simpleSubscriptionDescs) {
|
||||
subscriptions = new ArrayList<>();
|
||||
subscriptions.add(getSubscription(simpleSubscriptionDesc.getId()));
|
||||
}
|
||||
subs.put(s,subscriptions);
|
||||
subs.put(s, subscriptions);
|
||||
}
|
||||
return subs;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package eu.dnetlib.repo.manager.service;
|
||||
|
||||
import eu.dnetlib.domain.data.Repository;
|
||||
import eu.dnetlib.repo.manager.domain.*;
|
||||
import eu.dnetlib.repo.manager.domain.broker.BrowseEntry;
|
||||
import org.apache.log4j.Logger;
|
||||
|
@ -27,58 +26,58 @@ public class DashboardServiceImpl implements DashboardService {
|
|||
@Override
|
||||
public List<RepositorySummaryInfo> getRepositoriesSummaryInfo(String userEmail,
|
||||
String page,
|
||||
String size){
|
||||
String size) {
|
||||
|
||||
List<RepositorySummaryInfo> repositorySummaryInfoList = new ArrayList<>();
|
||||
|
||||
try {
|
||||
|
||||
List<Repository> repositoriesOfUser = repositoryService.getRepositoriesOfUser(userEmail, page, size);
|
||||
for(Repository repository: repositoriesOfUser) {
|
||||
RepositorySummaryInfo repositorySummaryInfo = new RepositorySummaryInfo();
|
||||
repositorySummaryInfo.setId(repository.getId());
|
||||
repositorySummaryInfo.setRepositoryName(repository.getOfficialName());
|
||||
repositorySummaryInfo.setLogoURL(repository.getLogoUrl());
|
||||
List<RepositorySnippet> repositoriesOfUser = repositoryService.getRepositoriesSnippetsOfUser(userEmail, page, size);
|
||||
for (RepositorySnippet repository : repositoriesOfUser) {
|
||||
RepositorySummaryInfo repositorySummaryInfo = new RepositorySummaryInfo();
|
||||
repositorySummaryInfo.setId(repository.getId());
|
||||
repositorySummaryInfo.setRepositoryName(repository.getOfficialname());
|
||||
repositorySummaryInfo.setLogoURL(repository.getLogoUrl());
|
||||
|
||||
//TODO getRepositoryAggregations returns only the 20 more recent items. Is it positive that we will find an indexed version there?
|
||||
long start = System.currentTimeMillis();
|
||||
List<AggregationDetails> aggregationDetailsList = repositoryService.getRepositoryAggregations(repository.getId(),0,20);
|
||||
for(AggregationDetails aggregationDetails: aggregationDetailsList) {
|
||||
if(aggregationDetails.getIndexedVersion()) {
|
||||
repositorySummaryInfo.setRecordsCollected(aggregationDetails.getNumberOfRecords());
|
||||
repositorySummaryInfo.setLastIndexedVersion(aggregationDetails.getDate());
|
||||
break;
|
||||
}
|
||||
//TODO getRepositoryAggregations returns only the 20 more recent items. Is it positive that we will find an indexed version there?
|
||||
long start = System.currentTimeMillis();
|
||||
List<AggregationDetails> aggregationDetailsList = repositoryService.getRepositoryAggregations(repository.getId(), 0, 20);
|
||||
for (AggregationDetails aggregationDetails : aggregationDetailsList) {
|
||||
if (aggregationDetails.getIndexedVersion()) {
|
||||
repositorySummaryInfo.setRecordsCollected(aggregationDetails.getNumberOfRecords());
|
||||
repositorySummaryInfo.setLastIndexedVersion(aggregationDetails.getDate());
|
||||
break;
|
||||
}
|
||||
long end = System.currentTimeMillis();
|
||||
|
||||
System.out.println("Got repo aggregations in "+ (end-start)+"ms");
|
||||
|
||||
try {
|
||||
|
||||
MetricsInfo metricsInfo = repositoryService.getMetricsInfoForRepository(repository.getId());
|
||||
repositorySummaryInfo.setTotalDownloads(metricsInfo.getMetricsNumbers().getTotalDownloads());
|
||||
repositorySummaryInfo.setTotalViews(metricsInfo.getMetricsNumbers().getTotalViews());
|
||||
|
||||
} catch (RepositoryServiceException e) {
|
||||
logger.error("Exception getting metrics info for repository: " + repository.getId(), e);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
List<BrowseEntry> events = brokerService.getTopicsForDatasource(repository.getOfficialName());
|
||||
Long totalEvents = 0L;
|
||||
for(BrowseEntry browseEntry: events)
|
||||
totalEvents += browseEntry.getSize();
|
||||
repositorySummaryInfo.setEnrichmentEvents(totalEvents);
|
||||
|
||||
|
||||
} catch (BrokerException e) {
|
||||
logger.error("Exception getting broker events for repository: " + repository.getId(), e);
|
||||
}
|
||||
|
||||
repositorySummaryInfoList.add(repositorySummaryInfo);
|
||||
}
|
||||
long end = System.currentTimeMillis();
|
||||
|
||||
System.out.println("Got repo aggregations in " + (end - start) + "ms");
|
||||
|
||||
try {
|
||||
|
||||
MetricsInfo metricsInfo = repositoryService.getMetricsInfoForRepository(repository.getId());
|
||||
repositorySummaryInfo.setTotalDownloads(metricsInfo.getMetricsNumbers().getTotalDownloads());
|
||||
repositorySummaryInfo.setTotalViews(metricsInfo.getMetricsNumbers().getTotalViews());
|
||||
|
||||
} catch (RepositoryServiceException e) {
|
||||
logger.error("Exception getting metrics info for repository: " + repository.getId(), e);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
List<BrowseEntry> events = brokerService.getTopicsForDatasource(repository.getOfficialname());
|
||||
Long totalEvents = 0L;
|
||||
for (BrowseEntry browseEntry : events)
|
||||
totalEvents += browseEntry.getSize();
|
||||
repositorySummaryInfo.setEnrichmentEvents(totalEvents);
|
||||
|
||||
|
||||
} catch (BrokerException e) {
|
||||
logger.error("Exception getting broker events for repository: " + repository.getId(), e);
|
||||
}
|
||||
|
||||
repositorySummaryInfoList.add(repositorySummaryInfo);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("Something baad happened!", e);
|
||||
|
|
|
@ -33,11 +33,9 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
private boolean override = false, logonly = false;
|
||||
private String overrideEmail = null, from = null;
|
||||
|
||||
@Autowired
|
||||
private MailLibrary mailLibrary;
|
||||
|
||||
@Autowired
|
||||
private CascadingPropertyLoader pLoader;
|
||||
private final MailLibrary mailLibrary;
|
||||
private final CascadingPropertyLoader pLoader;
|
||||
private final RepositoryService repositoryService;
|
||||
|
||||
@Value("${services.repo-manager.baseUrl}")
|
||||
private String baseUrl;
|
||||
|
@ -55,7 +53,12 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
private String valBaseUrl;
|
||||
|
||||
@Autowired
|
||||
private RepositoryService repositoryService;
|
||||
EmailUtilsImpl(MailLibrary mailLibrary, CascadingPropertyLoader pLoader,
|
||||
RepositoryService repositoryService) {
|
||||
this.mailLibrary = mailLibrary;
|
||||
this.pLoader = pLoader;
|
||||
this.repositoryService = repositoryService;
|
||||
}
|
||||
|
||||
|
||||
@PostConstruct
|
||||
|
@ -207,11 +210,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminRegistrationEmail(Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE content provider registration for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear administrator" + ",\n" +
|
||||
"\n" +
|
||||
"We received a request to register the " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]" +
|
||||
"We received a request to register the " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "]" +
|
||||
" to the OpenAIRE compliant list of content providers. " +
|
||||
"\n\n" +
|
||||
"User Contact: " + authentication.getName() + " (" + ((OIDCAuthenticationToken) authentication).getUserInfo().getEmail() + ")" +
|
||||
|
@ -233,12 +236,12 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserRegistrationEmail(Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE content provider registration for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear "+SecurityContextHolder.getContext().getAuthentication().getName()+",\n" +
|
||||
"\n" +
|
||||
"We received a request to register the " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "]" +
|
||||
"We received a request to register the " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "]" +
|
||||
" to the OpenAIRE compliant list of content providers. " +
|
||||
"\n\n" +
|
||||
"Please do not reply to this message\n" +
|
||||
|
@ -259,7 +262,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminRegisterInterfaceEmail(Repository repository, String comment, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE new interface registration request started for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear administrator" + ",\n" +
|
||||
"\n" +
|
||||
|
@ -267,7 +270,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
"Base URL: " + repositoryInterface.getBaseUrl() + "\n" +
|
||||
"Set: " + repositoryInterface.getAccessSet() + "\n" +
|
||||
"Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" +
|
||||
"to " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n";
|
||||
"to " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "].\n";
|
||||
|
||||
if (comment != null)
|
||||
message += "\nThe users comment was '" + comment + "'\n";
|
||||
|
@ -294,7 +297,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserRegisterInterfaceEmail(Repository repository, String comment, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE new interface registration request started for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear "+SecurityContextHolder.getContext().getAuthentication().getName()+",\n" +
|
||||
"\n" +
|
||||
|
@ -302,7 +305,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
"Base URL: " + repositoryInterface.getBaseUrl() + "\n" +
|
||||
"Set: " + repositoryInterface.getAccessSet() + "\n" +
|
||||
"Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" +
|
||||
"to " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n";
|
||||
"to " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "].\n";
|
||||
|
||||
if (comment != null) {
|
||||
message += "\n Your comment was '" + comment + "'\n";
|
||||
|
@ -328,12 +331,12 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserRegistrationResultsSuccessEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE new interface registration request - results (success) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear user,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on " + "[" + repository.getEnglishName() + "]" +
|
||||
"the compatibility test on " + "[" + repository.getOfficialName() + "]" +
|
||||
" was successful and the datasource type \""+ repository.getDatasourceType() + "\" will be prepared for aggregation in OpenAIRE."+
|
||||
"\n\n" +
|
||||
"Please note that it usually takes about 3-4 weeks until a data source is indexed and it’s metadata visible on openaire.eu.\n\n" +
|
||||
|
@ -361,11 +364,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminRegistrationResultsSuccessEmail(String issuerEmail, String jobId,RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE new interface registration request - results (success) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear admin ,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on " + "[" + repository.getEnglishName() + "]" +
|
||||
"the compatibility test on " + "[" + repository.getOfficialName() + "]" +
|
||||
" was successful and the datasource type \""+ repository.getDatasourceType() + "\" will be prepared for aggregation in OpenAIRE."+
|
||||
"\n\n" +
|
||||
"Please note that it usually takes about 3-4 weeks until a data source is indexed and it’s metadata visible on openaire.eu.\n\n" +
|
||||
|
@ -394,11 +397,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserRegistrationResultsFailureEmail(String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE new interface registration request - results (failure) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear user,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on " + "[" + repository.getEnglishName() + "]" +
|
||||
"the compatibility test on " + "[" + repository.getOfficialName() + "]" +
|
||||
" was not successful and the registration process was interrupted."+
|
||||
"\n\n" +
|
||||
"We will check what caused the problem and get back to you within a couple of days.\n\n" +
|
||||
|
@ -426,11 +429,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminRegistrationResultsFailureEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE new interface registration request - results (failure) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear admin,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on " + "[" + repository.getEnglishName() + "]" +
|
||||
"the compatibility test on " + "[" + repository.getOfficialName() + "]" +
|
||||
" was not successful and the registration process was interrupted."+
|
||||
"\n\n" +
|
||||
"We will check what caused the problem and get back to you within a couple of days.\n\n" +
|
||||
|
@ -459,12 +462,12 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserUpdateResultsSuccessEmail(String issuer, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE interface update request - results (success) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear user,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on [" + repository.getEnglishName()+"] has been successful\n\n" +
|
||||
"the compatibility test on [" + repository.getOfficialName()+"] has been successful\n\n" +
|
||||
"We will check your transmitted information and adjust the aggregation settings accordingly. Please note that it usually takes about 3-4 weeks until the changes are visible on openaire.eu."+"\n\n" +
|
||||
"Registration identifier in OpenAIRE: "+ repository.getNamespacePrefix()+
|
||||
"\nOfficial Name:" + repository.getOfficialName() +
|
||||
|
@ -490,11 +493,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminUpdateResultsSuccessEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE interface update request - results (success) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear admin,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on [" + repository.getEnglishName()+"] has been successful\n\n" +
|
||||
"the compatibility test on [" + repository.getOfficialName()+"] has been successful\n\n" +
|
||||
"We will check your transmitted information and adjust the aggregation settings accordingly. Please note that it usually takes about 3-4 weeks until the changes are visible on openaire.eu."+"\n\n" +
|
||||
"Registration identifier in OpenAIRE: "+ repository.getNamespacePrefix()+
|
||||
"\nOfficial Name:" + repository.getOfficialName() +
|
||||
|
@ -521,12 +524,12 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserUpdateResultsFailureEmail(String issuer, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE interface update request - results (failure) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear user,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on " + "[" + repository.getEnglishName() + "]" +
|
||||
"the compatibility test on " + "[" + repository.getOfficialName() + "]" +
|
||||
" was not successful."+
|
||||
"\n\n" +
|
||||
"WWe will check your transmitted information to see what caused the problem and get back to you within a couple of days.\n\n" +
|
||||
|
@ -554,11 +557,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminUpdateResultsFailureEmail(String issuerEmail, String jobId, RepositoryInterface repositoryInterface, Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE interface update request - results (failure) for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear admin,\n" +
|
||||
"\n" +
|
||||
"the compatibility test on " + "[" + repository.getEnglishName() + "]" +
|
||||
"the compatibility test on " + "[" + repository.getOfficialName() + "]" +
|
||||
" was not successful."+
|
||||
"\n\n" +
|
||||
"WWe will check your transmitted information to see what caused the problem and get back to you within a couple of days.\n\n" +
|
||||
|
@ -653,11 +656,11 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminUpdateRepositoryInfoEmail(Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE content provider update information for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear administrator" + ",\n" +
|
||||
"\n" +
|
||||
"We received a request to update the basic information for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n\n" +
|
||||
"We received a request to update the basic information for " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "].\n\n" +
|
||||
"Please do not reply to this message\n" +
|
||||
"This message has been generated automatically.\n\n" +
|
||||
"Regards,\n" +
|
||||
|
@ -675,12 +678,12 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserUpdateRepositoryInfoEmail(Repository repository, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE content provider update information for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear user,\n" +
|
||||
"\n" +
|
||||
"We received a request to update the basic information for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n\n" +
|
||||
"We received a request to update the basic information for " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "].\n\n" +
|
||||
"Please do not reply to this message\n" +
|
||||
"This message has been generated automatically.\n\n" +
|
||||
"If you have any questions, write to 'helpdesk@openaire.eu'. \n\n" +
|
||||
|
@ -699,7 +702,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendAdminUpdateInterfaceEmail(Repository repository, String comment, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE interface update request started for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
String message = "Dear administrator" + ",\n" +
|
||||
"\n" +
|
||||
|
@ -707,7 +710,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
"Base URL: " + repositoryInterface.getBaseUrl() + "\n" +
|
||||
"Set: " + repositoryInterface.getAccessSet() + "\n" +
|
||||
"Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" +
|
||||
"for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n";
|
||||
"for " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "].\n";
|
||||
|
||||
if (comment != null)
|
||||
message += "\nThe users comment was '" + comment + "'\n";
|
||||
|
@ -732,7 +735,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
public void sendUserUpdateInterfaceEmail(Repository repository, String comment, RepositoryInterface repositoryInterface, Authentication authentication) throws Exception {
|
||||
try {
|
||||
String subject = "OpenAIRE interface update request started for " +
|
||||
repository.getDatasourceType() + "[" + repository.getEnglishName() + "]";
|
||||
repository.getDatasourceType() + "[" + repository.getOfficialName() + "]";
|
||||
|
||||
// String message = "Dear " + ((OIDCAuthenticationToken) authentication).getUserInfo().getName() + ",\n" +
|
||||
String message = "Dear user,\n" +
|
||||
|
@ -741,7 +744,7 @@ public class EmailUtilsImpl implements EmailUtils {
|
|||
"Base URL: " + repositoryInterface.getBaseUrl() + "\n" +
|
||||
"Set: " + repositoryInterface.getAccessSet() + "\n" +
|
||||
"Guidelines: " + repositoryInterface.getDesiredCompatibilityLevel() + "\n\n" +
|
||||
"for " + repository.getDatasourceType() + "[" + repository.getEnglishName() + "].\n";
|
||||
"for " + repository.getDatasourceType() + "[" + repository.getOfficialName() + "].\n";
|
||||
|
||||
if (comment != null) {
|
||||
message += "\n Your comment was '" + comment + "'\n";
|
||||
|
|
|
@ -75,7 +75,7 @@ public class PiWikServiceImpl implements PiWikService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or (hasAuthority('REGISTERED_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
|
||||
public PiwikInfo savePiwikInfo(PiwikInfo piwikInfo) {
|
||||
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
|
||||
jdbcTemplate.update(INSERT_PIWIK_INFO, new Object[]{piwikInfo.getRepositoryId(), piwikInfo.getSiteId(), piwikInfo.getRequestorName(),
|
||||
|
@ -144,7 +144,7 @@ public class PiWikServiceImpl implements PiWikService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN')")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public ResponseEntity<Object> approvePiwikSite(String repositoryId) {
|
||||
new JdbcTemplate(dataSource).update(APPROVE_PIWIK_SITE, new Object[] {repositoryId}, new int[] {Types.VARCHAR});
|
||||
return new ResponseEntity<>("OK",HttpStatus.OK);
|
||||
|
@ -158,7 +158,7 @@ public class PiWikServiceImpl implements PiWikService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN')")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR')")
|
||||
public ResponseEntity<Object> markPiwikSiteAsValidated(String repositoryId) throws RepositoryServiceException {
|
||||
try {
|
||||
approvePiwikSite(repositoryId);
|
||||
|
@ -179,7 +179,7 @@ public class PiWikServiceImpl implements PiWikService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_ADMIN') or hasRole('ROLE_PROVIDE_ADMIN') or (hasRole('ROLE_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
|
||||
@PreAuthorize("hasAuthority('SUPER_ADMINISTRATOR') or hasAuthority('CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR') or (hasAuthority('REGISTERED_USER') and #piwikInfo.requestorEmail == authentication.userInfo.email)")
|
||||
public PiwikInfo enableMetricsForRepository(String officialName,
|
||||
String repoWebsite,
|
||||
PiwikInfo piwikInfo) throws RepositoryServiceException {
|
||||
|
|
|
@ -14,29 +14,46 @@ import java.util.Map;
|
|||
public interface RepositoryService {
|
||||
|
||||
|
||||
Country[] getCountries() ;
|
||||
// TODO: move this elsewhere
|
||||
Country[] getCountries();
|
||||
|
||||
List<Repository> getRepositories(List<String> ids) throws JSONException;
|
||||
|
||||
List<Repository> getRepositories(List<String> ids, int page, int size) throws JSONException;
|
||||
|
||||
List<RepositorySnippet> getRepositoriesSnippets(List<String> ids) throws Exception;
|
||||
|
||||
List<RepositorySnippet> getRepositoriesSnippets(List<String> ids, int page, int size) throws Exception;
|
||||
|
||||
List<RepositorySnippet> getRepositoriesByCountry(String country, String mode, Boolean managed) throws JSONException, IOException;
|
||||
|
||||
// TODO: remove?
|
||||
List<Repository> getRepositoriesOfUser(String page, String size) throws JSONException, IOException;
|
||||
|
||||
// TODO: remove?
|
||||
List<Repository> getRepositoriesOfUser(String userEmail,
|
||||
String page,
|
||||
String size) throws JSONException, IOException;
|
||||
|
||||
List<RepositorySnippet> getRepositoriesSnippetOfUser(String userEmail, String page, String size) throws IOException, JSONException;
|
||||
List<RepositorySnippet> getRepositoriesSnippetsOfUser(String page, String size) throws Exception;
|
||||
|
||||
List<RepositorySnippet> getRepositoriesSnippetsOfUser(String userEmail, String page, String size) throws Exception;
|
||||
|
||||
RepositorySnippet getRepositorySnippetById(String id) throws JSONException, ResourceNotFoundException;
|
||||
|
||||
Repository getRepositoryById(String id) throws JSONException, ResourceNotFoundException;
|
||||
|
||||
List<AggregationDetails> getRepositoryAggregations(String id, int from, int size) throws JSONException;
|
||||
|
||||
Map<String,List<AggregationDetails>> getRepositoryAggregationsByYear(String id) throws JSONException;
|
||||
Map<String, List<AggregationDetails>> getRepositoryAggregationsByYear(String id) throws JSONException;
|
||||
|
||||
List<Repository> getRepositoriesByName(String name,
|
||||
String page,
|
||||
String size) throws JSONException;
|
||||
|
||||
List<RepositorySnippet> searchRegisteredRepositories(String country, String typology, String englishName,
|
||||
String officialName, String requestSortBy, String order,
|
||||
int page, int pageSize) throws Exception;
|
||||
String officialName, String requestSortBy, String order,
|
||||
int page, int pageSize) throws Exception;
|
||||
|
||||
List<RepositoryInterface> getRepositoryInterface(String id) throws JSONException;
|
||||
|
||||
|
@ -59,7 +76,7 @@ public interface RepositoryService {
|
|||
|
||||
List<String> getUrlsOfUserRepos(String user_email,
|
||||
String page,
|
||||
String size) throws JSONException;
|
||||
String size);
|
||||
|
||||
List<String> getDatasourceVocabularies(String mode);
|
||||
|
||||
|
@ -71,7 +88,7 @@ public interface RepositoryService {
|
|||
|
||||
MetricsInfo getMetricsInfoForRepository(String repoId) throws RepositoryServiceException;
|
||||
|
||||
Map<String, String> getListLatestUpdate(String mode) throws RepositoryServiceException, JSONException;
|
||||
Map<String, String> getListLatestUpdate(String mode) throws JSONException;
|
||||
|
||||
RepositoryInterface updateRepositoryInterface(String repoId, String registeredBy, String comment, RepositoryInterface repositoryInterface) throws Exception;
|
||||
|
||||
|
|
|
@ -1,13 +1,21 @@
|
|||
package eu.dnetlib.repo.manager.service;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import eu.dnetlib.api.functionality.ValidatorServiceException;
|
||||
import eu.dnetlib.domain.data.Repository;
|
||||
import eu.dnetlib.domain.data.RepositoryInterface;
|
||||
import eu.dnetlib.domain.enabling.Vocabulary;
|
||||
import eu.dnetlib.domain.functionality.validator.JobForValidation;
|
||||
import eu.dnetlib.repo.manager.domain.*;
|
||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||
import eu.dnetlib.repo.manager.service.aai.registry.AaiRegistryService;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthoritiesUpdater;
|
||||
import eu.dnetlib.repo.manager.service.security.AuthorizationService;
|
||||
import eu.dnetlib.repo.manager.service.security.RoleMappingService;
|
||||
import eu.dnetlib.repo.manager.utils.Converter;
|
||||
import gr.uoa.di.driver.enabling.vocabulary.VocabularyLoader;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
@ -15,14 +23,17 @@ import org.apache.log4j.Logger;
|
|||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.HttpClientErrorException;
|
||||
import org.springframework.web.client.RestClientException;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponents;
|
||||
|
@ -38,49 +49,67 @@ import java.util.stream.Collectors;
|
|||
@Service("repositoryService")
|
||||
public class RepositoryServiceImpl implements RepositoryService {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(RepositoryServiceImpl.class);
|
||||
|
||||
private final AuthorizationService authorizationService;
|
||||
private final RoleMappingService roleMappingService;
|
||||
private final AaiRegistryService registryCalls;
|
||||
private final AuthoritiesUpdater authoritiesUpdater;
|
||||
private final RestTemplate restTemplate;
|
||||
private final VocabularyLoader vocabularyLoader;
|
||||
private final PiWikService piWikService;
|
||||
private final EmailUtils emailUtils;
|
||||
private final ValidatorService validatorService;
|
||||
|
||||
@Value("${api.baseAddress}")
|
||||
private String baseAddress;
|
||||
|
||||
@Value("${services.repo-manager.adminEmail}")
|
||||
private String adminEmail;
|
||||
|
||||
@Autowired
|
||||
RestTemplate restTemplate;
|
||||
|
||||
private HttpHeaders httpHeaders;
|
||||
|
||||
private final String[] vocabularyNames = {"dnet:countries", "dnet:datasource_typologies", "dnet:compatibilityLevel"};
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(RepositoryServiceImpl.class);
|
||||
|
||||
@Value("${services.repomanager.usageStatisticsDiagramsBaseURL}")
|
||||
private String usageStatisticsDiagramsBaseURL;
|
||||
|
||||
@Value("${services.repomanager.usageStatisticsNumbersBaseURL}")
|
||||
private String usageStatisticsNumbersBaseURL;
|
||||
|
||||
@Autowired
|
||||
private VocabularyLoader vocabularyLoader;
|
||||
|
||||
private static final Map<String, List<String>> dataSourceClass = new HashMap<>();
|
||||
private static final Map<String, String> invertedDataSourceClass = new HashMap<>();
|
||||
|
||||
|
||||
private final String[] vocabularyNames = {"dnet:countries", "dnet:datasource_typologies", "dnet:compatibilityLevel"};
|
||||
private final Map<String, Vocabulary> vocabularyMap = new ConcurrentHashMap<>();
|
||||
private final Map<String, String> countriesMap = new HashMap<>();
|
||||
private final Map<String, String> inverseCountriesMap = new HashMap<>();
|
||||
|
||||
private HttpHeaders httpHeaders;
|
||||
|
||||
@Autowired
|
||||
private PiWikService piWikService;
|
||||
|
||||
@Autowired
|
||||
private EmailUtils emailUtils;
|
||||
|
||||
@Autowired
|
||||
ValidatorService validatorService;
|
||||
|
||||
|
||||
private Map<String, Vocabulary> vocabularyMap = new ConcurrentHashMap<>();
|
||||
|
||||
private Map<String, String> countriesMap = new HashMap<>();
|
||||
private Map<String, String> inverseCountriesMap = new HashMap<>();
|
||||
|
||||
private static Map<String,List<String>> dataSourceClass = new HashMap<>();
|
||||
|
||||
private static Map<String,String> invertedDataSourceClass = new HashMap<>();
|
||||
public RepositoryServiceImpl(AuthorizationService authorizationService,
|
||||
RoleMappingService roleMappingService,
|
||||
AaiRegistryService registryCalls,
|
||||
AuthoritiesUpdater authoritiesUpdater,
|
||||
VocabularyLoader vocabularyLoader,
|
||||
RestTemplate restTemplate,
|
||||
@Lazy EmailUtils emailUtils,
|
||||
@Lazy ValidatorService validatorService,
|
||||
@Lazy PiWikService piWikService) {
|
||||
this.authorizationService = authorizationService;
|
||||
this.roleMappingService = roleMappingService;
|
||||
this.registryCalls = registryCalls;
|
||||
this.authoritiesUpdater = authoritiesUpdater;
|
||||
this.vocabularyLoader = vocabularyLoader;
|
||||
this.piWikService = piWikService;
|
||||
this.emailUtils = emailUtils;
|
||||
this.validatorService = validatorService;
|
||||
this.restTemplate = restTemplate;
|
||||
}
|
||||
|
||||
private String getAuthenticatedUserEmail() {
|
||||
OIDCAuthenticationToken authenticationToken = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
return authenticationToken.getUserInfo().getEmail();
|
||||
}
|
||||
|
||||
|
||||
@PostConstruct
|
||||
|
@ -88,21 +117,21 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
LOGGER.debug("Initialization method of repository api!");
|
||||
LOGGER.debug("Updated version!");
|
||||
|
||||
dataSourceClass.put("opendoar",Arrays.asList("pubsrepository::institutional","pubsrepository::thematic","pubsrepository::unknown","pubsrepository::mock"));
|
||||
dataSourceClass.put("opendoar", Arrays.asList("pubsrepository::institutional", "pubsrepository::thematic", "pubsrepository::unknown", "pubsrepository::mock"));
|
||||
dataSourceClass.put("re3data", Collections.singletonList("datarepository::unknown"));
|
||||
dataSourceClass.put("journal", Collections.singletonList("pubsrepository::journal"));
|
||||
dataSourceClass.put("aggregator",Arrays.asList("aggregator::pubsrepository::institutional","aggregator::pubsrepository::journals","aggregator::datarepository", "aggregator::pubsrepository::unknown"));
|
||||
dataSourceClass.put("aggregator", Arrays.asList("aggregator::pubsrepository::institutional", "aggregator::pubsrepository::journals", "aggregator::datarepository", "aggregator::pubsrepository::unknown"));
|
||||
|
||||
invertedDataSourceClass.put("pubsrepository::institutional","opendoar");
|
||||
invertedDataSourceClass.put("pubsrepository::thematic","opendoar");
|
||||
invertedDataSourceClass.put("pubsrepository::unknown","opendoar");
|
||||
invertedDataSourceClass.put("pubsrepository::mock","opendoar");
|
||||
invertedDataSourceClass.put("datarepository::unknown","re3data");
|
||||
invertedDataSourceClass.put("pubsrepository::journal","journal");
|
||||
invertedDataSourceClass.put("aggregator::pubsrepository::institutional","aggregator");
|
||||
invertedDataSourceClass.put("aggregator::pubsrepository::journals","aggregator");
|
||||
invertedDataSourceClass.put("aggregator::datarepository","aggregator");
|
||||
invertedDataSourceClass.put("aggregator::pubsrepository::unknown","aggregator");
|
||||
invertedDataSourceClass.put("pubsrepository::institutional", "opendoar");
|
||||
invertedDataSourceClass.put("pubsrepository::thematic", "opendoar");
|
||||
invertedDataSourceClass.put("pubsrepository::unknown", "opendoar");
|
||||
invertedDataSourceClass.put("pubsrepository::mock", "opendoar");
|
||||
invertedDataSourceClass.put("datarepository::unknown", "re3data");
|
||||
invertedDataSourceClass.put("pubsrepository::journal", "journal");
|
||||
invertedDataSourceClass.put("aggregator::pubsrepository::institutional", "aggregator");
|
||||
invertedDataSourceClass.put("aggregator::pubsrepository::journals", "aggregator");
|
||||
invertedDataSourceClass.put("aggregator::datarepository", "aggregator");
|
||||
invertedDataSourceClass.put("aggregator::pubsrepository::unknown", "aggregator");
|
||||
|
||||
|
||||
httpHeaders = new HttpHeaders();
|
||||
|
@ -129,6 +158,83 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
return restTemplate.getForObject(uriComponents.toUri(), Country[].class);
|
||||
}
|
||||
|
||||
// FIXME: with the new roles of the users the "requestFilter.setRegisteredby(userEmail)" can no longer be used
|
||||
// and the "requestFilter.setId(repoId)" should return only one result at a time, thus,
|
||||
// another way for paging must be implemented.
|
||||
@Override
|
||||
public List<Repository> getRepositories(List<String> ids) throws JSONException {
|
||||
return getRepositories(ids, 0, 10);
|
||||
}
|
||||
|
||||
// FIXME: with the new roles of the users the "requestFilter.setRegisteredby(userEmail)" can no longer be used
|
||||
// and the "requestFilter.setId(repoId)" should return only one result at a time, thus,
|
||||
// another way for paging must be implemented.
|
||||
@Override
|
||||
public List<Repository> getRepositories(List<String> ids, int page, int size) throws JSONException {
|
||||
List<Repository> repos = new ArrayList<>();
|
||||
LOGGER.debug("Retreiving repositories with ids : " + String.join(", ", ids));
|
||||
UriComponents uriComponents = searchDatasource(Integer.toString(Math.abs(page)), Integer.toString(Math.abs(size)));
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
|
||||
try {
|
||||
for (String repoId : ids) {
|
||||
requestFilter.setId(repoId);
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
|
||||
repos.addAll(Converter.jsonToRepositoryList(new JSONObject(rs)));
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
LOGGER.debug("Exception on getRepositoriesOfUser", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
for (Repository r : repos)
|
||||
r.setPiwikInfo(piWikService.getPiwikSiteForRepo(r.getId()));
|
||||
return repos;
|
||||
}
|
||||
|
||||
// FIXME: with the new roles of the users the "requestFilter.setRegisteredby(userEmail)" can no longer be used
|
||||
// and the "requestFilter.setId(repoId)" should return only one result at a time, thus,
|
||||
// another way for paging must be implemented.
|
||||
@Override
|
||||
public List<RepositorySnippet> getRepositoriesSnippets(List<String> ids) throws Exception {
|
||||
return getRepositoriesSnippets(ids, 0, 10);
|
||||
}
|
||||
|
||||
// FIXME: with the new roles of the users the "requestFilter.setRegisteredby(userEmail)" can no longer be used
|
||||
// and the "requestFilter.setId(repoId)" should return only one result at a time, thus,
|
||||
// another way for paging must be implemented.
|
||||
@Override
|
||||
public List<RepositorySnippet> getRepositoriesSnippets(List<String> ids, int page, int size) throws Exception {
|
||||
List<RepositorySnippet> resultSet = new ArrayList<>();
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
// here page should be 0
|
||||
UriComponents uriComponents = searchSnipperDatasource(Integer.toString(Math.abs(page)), Integer.toString(Math.abs(size)));
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
|
||||
try {
|
||||
for (String repoId : ids) {
|
||||
requestFilter.setId(repoId);
|
||||
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
resultSet.addAll(mapper.readValue(String.valueOf(jsonArray),
|
||||
mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class)));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on getRepositoriesSnippetOfUser", e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
LOGGER.debug("resultSet:" + resultSet);
|
||||
resultSet.parallelStream().forEach(repositorySnippet -> {
|
||||
repositorySnippet.setPiwikInfo(piWikService.getPiwikSiteForRepo(repositorySnippet.getId()));
|
||||
});
|
||||
return resultSet;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<RepositorySnippet> getRepositoriesByCountry(String country,
|
||||
|
@ -151,32 +257,32 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
LOGGER.debug("Country code equals : " + country);
|
||||
LOGGER.debug("Filter mode equals : " + filterKey);
|
||||
|
||||
UriComponents uriComponents = searchSnipperDatasource(String.valueOf(page),String.valueOf(size));
|
||||
UriComponents uriComponents = searchSnipperDatasource(String.valueOf(page), String.valueOf(size));
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setCountry(country);
|
||||
requestFilter.setCollectedfrom(filterKey);
|
||||
|
||||
try{
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
try {
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
while (jsonArray.length() > 0 ) {
|
||||
while (jsonArray.length() > 0) {
|
||||
resultSet.addAll(mapper.readValue(String.valueOf(jsonArray),
|
||||
mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class)));
|
||||
page += 1;
|
||||
uriComponents = searchSnipperDatasource(String.valueOf(page),String.valueOf(size));
|
||||
rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
uriComponents = searchSnipperDatasource(String.valueOf(page), String.valueOf(size));
|
||||
rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
}
|
||||
return resultSet;
|
||||
}catch (Exception e){
|
||||
LOGGER.debug("Exception on getRepositoriesByCountry" , e);
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on getRepositoriesByCountry", e);
|
||||
// emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public List<RepositorySnippet> searchRegisteredRepositories(String country, String typology, String englishName,
|
||||
String officialName, String requestSortBy, String order, int page, int pageSize) throws Exception {
|
||||
String officialName, String requestSortBy, String order, int page, int pageSize) throws Exception {
|
||||
|
||||
LOGGER.debug("Searching registered repositories");
|
||||
|
||||
|
@ -192,14 +298,14 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
requestFilter.setEnglishname(englishName);
|
||||
|
||||
try {
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
|
||||
resultSet.addAll(mapper.readValue(String.valueOf(jsonArray), mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class)));
|
||||
resultSet.addAll(mapper.readValue(String.valueOf(jsonArray), mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class)));
|
||||
|
||||
return resultSet;
|
||||
}catch (Exception e){
|
||||
LOGGER.error("Error searching registered datasources" , e);
|
||||
return resultSet;
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("Error searching registered datasources", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
@ -207,9 +313,9 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
private Repository updateRepositoryInfo(Repository r) throws JSONException {
|
||||
|
||||
/*
|
||||
* from datasource class
|
||||
* we get the datasource type form the inverted map
|
||||
* */
|
||||
* from datasource class
|
||||
* we get the datasource type form the inverted map
|
||||
* */
|
||||
r.setDatasourceType(getRepositoryType(r.getDatasourceClass()));
|
||||
r.setInterfaces(this.getRepositoryInterface(r.getId()));
|
||||
r.setPiwikInfo(piWikService.getPiwikSiteForRepo(r.getId()));
|
||||
|
@ -230,79 +336,78 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Repository> getRepositoriesOfUser(String userEmail,
|
||||
String page,
|
||||
String size) throws JSONException {
|
||||
|
||||
LOGGER.debug("Retreiving repositories of user : " + userEmail );
|
||||
UriComponents uriComponents = searchDatasource(page,size);
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setRegisteredby(userEmail);
|
||||
|
||||
try{
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
|
||||
List<Repository> repos = Converter.jsonToRepositoryList(new JSONObject(rs));
|
||||
for (Repository r : repos)
|
||||
r.setPiwikInfo(piWikService.getPiwikSiteForRepo(r.getId()));
|
||||
return repos;
|
||||
}catch (Exception e){
|
||||
LOGGER.debug("Exception on getRepositoriesOfUser" , e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
public List<Repository> getRepositoriesOfUser(String page, String size) throws JSONException {
|
||||
String userEmail = ((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo().getEmail();
|
||||
LOGGER.debug("Retreiving repositories of authenticated user : " + userEmail);
|
||||
Collection<String> repoIds = roleMappingService.getRepoIdsByRoleIds(authorizationService.getUserRoles());
|
||||
return getRepositories(new ArrayList<>(repoIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RepositorySnippet> getRepositoriesSnippetOfUser(String userEmail, String page, String size) throws IOException, JSONException {
|
||||
List<RepositorySnippet> resultSet = new ArrayList<>();
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
UriComponents uriComponents = searchSnipperDatasource(page,size);
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setRegisteredby(userEmail);
|
||||
|
||||
try{
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
while (jsonArray.length() > 0 ) {
|
||||
resultSet.addAll(mapper.readValue(String.valueOf(jsonArray),
|
||||
mapper.getTypeFactory().constructCollectionType(List.class, RepositorySnippet.class)));
|
||||
page += 1;
|
||||
uriComponents = searchSnipperDatasource(page,size);
|
||||
rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
}
|
||||
resultSet.parallelStream().forEach(repositorySnippet -> {
|
||||
repositorySnippet.setPiwikInfo(piWikService.getPiwikSiteForRepo(repositorySnippet.getId()));
|
||||
});
|
||||
return resultSet;
|
||||
}catch (Exception e){
|
||||
LOGGER.debug("Exception on getRepositoriesByCountry" , e);
|
||||
throw e;
|
||||
}
|
||||
public List<Repository> getRepositoriesOfUser(String userEmail, String page, String size) throws JSONException {
|
||||
LOGGER.debug("Retreiving repositories of authenticated user : " + userEmail);
|
||||
Collection<String> repoIds = roleMappingService.getRepoIdsByRoleIds(authorizationService.getUserRoles(userEmail));
|
||||
return getRepositories(new ArrayList<>(repoIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Repository getRepositoryById(String id) throws JSONException,ResourceNotFoundException {
|
||||
public List<RepositorySnippet> getRepositoriesSnippetsOfUser(String page, String size) throws Exception {
|
||||
Collection<String> repoIds = roleMappingService.getRepoIdsByRoleIds(authorizationService.getUserRoles());
|
||||
return getRepositoriesSnippets(new ArrayList<>(repoIds));
|
||||
}
|
||||
|
||||
LOGGER.debug("Retreiving repositories with id : " + id );
|
||||
Repository repo = null;
|
||||
UriComponents uriComponents = searchDatasource("0","100");
|
||||
@Override
|
||||
public List<RepositorySnippet> getRepositoriesSnippetsOfUser(String userEmail, String page, String size) throws Exception {
|
||||
Collection<String> repoIds = roleMappingService.getRepoIdsByRoleIds(authorizationService.getUserRoles(userEmail));
|
||||
return getRepositoriesSnippets(new ArrayList<>(repoIds));
|
||||
}
|
||||
|
||||
@Override
|
||||
public RepositorySnippet getRepositorySnippetById(String id) throws JSONException, ResourceNotFoundException {
|
||||
|
||||
LOGGER.debug("Retreiving repositories with id : " + id);
|
||||
RepositorySnippet repo = null;
|
||||
UriComponents uriComponents = searchSnipperDatasource("0", "100");
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setId(id);
|
||||
|
||||
try{
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
try {
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
|
||||
if(jsonArray.length() == 0)
|
||||
if (jsonArray.length() == 0)
|
||||
throw new ResourceNotFoundException();
|
||||
|
||||
repo = Converter.jsonToRepositorySnippetObject(jsonArray.getJSONObject(0));
|
||||
return repo;
|
||||
} catch (JSONException e) {
|
||||
LOGGER.debug("Exception on getRepositoryById", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Repository getRepositoryById(String id) throws JSONException, ResourceNotFoundException {
|
||||
|
||||
LOGGER.debug("Retreiving repositories with id : " + id);
|
||||
Repository repo = null;
|
||||
UriComponents uriComponents = searchDatasource("0", "100");
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setId(id);
|
||||
|
||||
try {
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
JSONArray jsonArray = (JSONArray) new JSONObject(rs).get("datasourceInfo");
|
||||
|
||||
if (jsonArray.length() == 0)
|
||||
throw new ResourceNotFoundException();
|
||||
|
||||
repo = Converter.jsonToRepositoryObject(jsonArray.getJSONObject(0));
|
||||
return updateRepositoryInfo(repo);
|
||||
}catch (JSONException e){
|
||||
LOGGER.debug("Exception on getRepositoryById" , e);
|
||||
} catch (JSONException e) {
|
||||
LOGGER.debug("Exception on getRepositoryById", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -313,8 +418,8 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
@Override
|
||||
public List<AggregationDetails> getRepositoryAggregations(String id, int from, int size) throws JSONException {
|
||||
|
||||
LOGGER.debug("Retreiving aggregations for repository with id : " + id );
|
||||
UriComponents uriComponents = searchDatasource(from+"",size+"");
|
||||
LOGGER.debug("Retreiving aggregations for repository with id : " + id);
|
||||
UriComponents uriComponents = searchDatasource(from + "", size + "");
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setId(id);
|
||||
|
||||
|
@ -322,26 +427,26 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
|
||||
try {
|
||||
long start = System.currentTimeMillis();
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
long end = System.currentTimeMillis();
|
||||
|
||||
System.out.println("Aggregations request through rest template took " + (end-start)+"ms");
|
||||
System.out.println("Aggregations request through rest template took " + (end - start) + "ms");
|
||||
JSONObject repository = new JSONObject(rs);
|
||||
|
||||
if(repository.getJSONArray("datasourceInfo").length() == 0)
|
||||
if (repository.getJSONArray("datasourceInfo").length() == 0)
|
||||
return aggregationHistory;
|
||||
|
||||
start = System.currentTimeMillis();
|
||||
aggregationHistory.addAll(Converter.getAggregationHistoryFromJson(repository.getJSONArray("datasourceInfo").getJSONObject(0)));
|
||||
end = System.currentTimeMillis();
|
||||
|
||||
System.out.println("Getting aggregations history from json " + (end-start)+"ms");
|
||||
return aggregationHistory.size() == 0? aggregationHistory : aggregationHistory.stream()
|
||||
.sorted(Comparator.comparing(AggregationDetails::getDate).reversed())
|
||||
.limit(size)
|
||||
.collect(Collectors.toList());
|
||||
System.out.println("Getting aggregations history from json " + (end - start) + "ms");
|
||||
return aggregationHistory.size() == 0 ? aggregationHistory : aggregationHistory.stream()
|
||||
.sorted(Comparator.comparing(AggregationDetails::getDate).reversed())
|
||||
.limit(size)
|
||||
.collect(Collectors.toList());
|
||||
} catch (JSONException e) {
|
||||
LOGGER.debug("Exception on getRepositoryAggregations" , e);
|
||||
LOGGER.debug("Exception on getRepositoryAggregations", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -350,38 +455,38 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
|
||||
@Override
|
||||
public Map<String, List<AggregationDetails>> getRepositoryAggregationsByYear(String id) throws JSONException {
|
||||
LOGGER.debug("Retreiving aggregations (by year) for repository with id : " + id );
|
||||
UriComponents uriComponents = searchDatasource("0","100");
|
||||
LOGGER.debug("Retreiving aggregations (by year) for repository with id : " + id);
|
||||
UriComponents uriComponents = searchDatasource("0", "100");
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setId(id);
|
||||
|
||||
List<AggregationDetails> aggregationHistory = new ArrayList<>();
|
||||
Map<String, List<AggregationDetails>> aggregationByYear = new HashMap<>();
|
||||
try {
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
JSONObject repository = new JSONObject(rs);
|
||||
|
||||
if(repository.getJSONArray("datasourceInfo").length() == 0)
|
||||
if (repository.getJSONArray("datasourceInfo").length() == 0)
|
||||
return aggregationByYear;
|
||||
|
||||
aggregationHistory.addAll(Converter.getAggregationHistoryFromJson(repository.getJSONArray("datasourceInfo").getJSONObject(0)));
|
||||
return aggregationHistory.size() == 0? aggregationByYear:createYearMap(aggregationHistory);
|
||||
return aggregationHistory.size() == 0 ? aggregationByYear : createYearMap(aggregationHistory);
|
||||
|
||||
} catch (JSONException e) {
|
||||
LOGGER.debug("Exception on getRepositoryAggregations" , e);
|
||||
LOGGER.debug("Exception on getRepositoryAggregations", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String,List<AggregationDetails>> createYearMap(List<AggregationDetails> aggregationHistory) {
|
||||
private Map<String, List<AggregationDetails>> createYearMap(List<AggregationDetails> aggregationHistory) {
|
||||
Map<String, List<AggregationDetails>> aggregationByYear;
|
||||
aggregationHistory = aggregationHistory.stream()
|
||||
.sorted(Comparator.comparing(AggregationDetails::getDate).reversed())
|
||||
.collect(Collectors.toList());
|
||||
.sorted(Comparator.comparing(AggregationDetails::getDate).reversed())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return aggregationHistory.stream()
|
||||
.collect(Collectors.groupingBy(AggregationDetails::getYear));
|
||||
return aggregationHistory.stream()
|
||||
.collect(Collectors.groupingBy(AggregationDetails::getYear));
|
||||
}
|
||||
|
||||
|
||||
|
@ -390,19 +495,19 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
String page,
|
||||
String size) throws JSONException {
|
||||
|
||||
LOGGER.debug("Retreiving repositories with official name : " + name );
|
||||
UriComponents uriComponents = searchDatasource("0","100");
|
||||
LOGGER.debug("Retreiving repositories with official name : " + name);
|
||||
UriComponents uriComponents = searchDatasource("0", "100");
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setOfficialname(name);
|
||||
|
||||
try{
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(),requestFilter, String.class);
|
||||
try {
|
||||
String rs = restTemplate.postForObject(uriComponents.toUri(), requestFilter, String.class);
|
||||
List<Repository> repos = Converter.jsonToRepositoryList(new JSONObject(rs));
|
||||
for (Repository r : repos)
|
||||
updateRepositoryInfo(r);
|
||||
return repos;
|
||||
}catch (Exception e){
|
||||
LOGGER.debug("Exception on getRepositoriesByName" , e);
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on getRepositoriesByName", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -417,11 +522,11 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
.path("/{id}")
|
||||
.build().expand(id).encode();
|
||||
|
||||
try{
|
||||
try {
|
||||
String rs = restTemplate.getForObject(uriComponents.toUri(), String.class);
|
||||
return Converter.jsonToRepositoryInterfaceList(new JSONObject(rs));
|
||||
}catch (Exception e ){
|
||||
LOGGER.debug("Exception on getRepositoryInterface" , e);
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on getRepositoryInterface", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -442,14 +547,48 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
repository.setId("openaire____::issn" + repository.getIssn());
|
||||
repository.setNamespacePrefix("issn" + repository.getIssn());
|
||||
this.storeRepository(repository, SecurityContextHolder.getContext().getAuthentication());
|
||||
}else if (datatype.equals("aggregator")) {
|
||||
} else if (datatype.equals("aggregator")) {
|
||||
repository.setId("openaire____::" + com.unboundid.util.Base64.encode(repository.getOfficialName()));
|
||||
repository.setNamespacePrefix(DigestUtils.md5Hex(repository.getOfficialName()).substring(0,12));
|
||||
repository.setNamespacePrefix(DigestUtils.md5Hex(repository.getOfficialName()).substring(0, 12));
|
||||
this.storeRepository(repository, SecurityContextHolder.getContext().getAuthentication());
|
||||
}else {
|
||||
} else {
|
||||
this.latentUpdate(repository, SecurityContextHolder.getContext().getAuthentication());
|
||||
}
|
||||
|
||||
// TODO: move the following code elsewhere (creation and assignment of role to user) ??
|
||||
// Create new role
|
||||
String newRoleName = roleMappingService.getRoleIdByRepoId(repository.getId());
|
||||
Role newRole = new Role(newRoleName, repository.getOfficialName());
|
||||
Integer couId = null;
|
||||
try {
|
||||
couId = registryCalls.createRole(newRole);
|
||||
} catch (HttpClientErrorException e) {
|
||||
couId = registryCalls.getCouId(newRoleName);
|
||||
if (couId == null) {
|
||||
LOGGER.error(String.format("Could not create role '%s'", newRoleName), e);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
LOGGER.error(String.format("Could not create role '%s'", newRoleName), e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Assign new role to the user that created it
|
||||
Integer coPersonId = registryCalls.getCoPersonIdByIdentifier();
|
||||
if (couId != null) {
|
||||
Integer role = registryCalls.getRoleId(coPersonId, couId);
|
||||
try {
|
||||
registryCalls.assignMemberRole(coPersonId, couId, role);
|
||||
|
||||
// Add role to current user authorities
|
||||
authoritiesUpdater.addRole(roleMappingService.convertRepoIdToAuthority(repository.getId()));
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on assign role to user during add repository", e);
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
return repository;
|
||||
}
|
||||
|
||||
|
@ -465,17 +604,17 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
LOGGER.debug("JSON to add(update) -> " + json_repository);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<String>(json_repository, httpHeaders);
|
||||
ResponseEntity responseEntity = restTemplate.exchange(uriComponents.toUri(),HttpMethod.POST, httpEntity, ResponseEntity.class);
|
||||
ResponseEntity responseEntity = restTemplate.exchange(uriComponents.toUri(), HttpMethod.POST, httpEntity, ResponseEntity.class);
|
||||
|
||||
if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
|
||||
emailUtils.sendUserRegistrationEmail(repository, authentication);
|
||||
emailUtils.sendAdminRegistrationEmail(repository, authentication);
|
||||
// emailUtils.sendUserRegistrationEmail(repository, authentication);
|
||||
// emailUtils.sendAdminRegistrationEmail(repository, authentication);
|
||||
} else
|
||||
LOGGER.debug(responseEntity.getBody().toString());
|
||||
|
||||
return repository;
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on updateRepository" , e);
|
||||
LOGGER.debug("Exception on updateRepository", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -484,7 +623,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Repository updateRepository(Repository repository,Authentication authentication) throws Exception {
|
||||
public Repository updateRepository(Repository repository, Authentication authentication) throws Exception {
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/update/")
|
||||
.build()
|
||||
|
@ -496,7 +635,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
LOGGER.debug("JSON to update -> " + json_repository);
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity<String>(json_repository, httpHeaders);
|
||||
ResponseEntity responseEntity = restTemplate.exchange(uriComponents.toUri(),HttpMethod.POST, httpEntity
|
||||
ResponseEntity responseEntity = restTemplate.exchange(uriComponents.toUri(), HttpMethod.POST, httpEntity
|
||||
, ResponseEntity.class);
|
||||
|
||||
if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
|
||||
|
@ -507,7 +646,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
|
||||
return repository;
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on updateRepository" , e);
|
||||
LOGGER.debug("Exception on updateRepository", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -526,10 +665,10 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
.build()
|
||||
.encode();
|
||||
String json_repository = Converter.repositoryObjectToJson(repository);
|
||||
HttpEntity<String> httpEntity = new HttpEntity <String> (json_repository,httpHeaders);
|
||||
ResponseEntity responseEntity = restTemplate.exchange(uriComponents.toUri(),HttpMethod.POST, httpEntity, ResponseEntity.class);
|
||||
HttpEntity<String> httpEntity = new HttpEntity<String>(json_repository, httpHeaders);
|
||||
ResponseEntity responseEntity = restTemplate.exchange(uriComponents.toUri(), HttpMethod.POST, httpEntity, ResponseEntity.class);
|
||||
|
||||
if(responseEntity.getStatusCode().equals(HttpStatus.OK)) {
|
||||
if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
|
||||
emailUtils.sendUserRegistrationEmail(repository, authentication);
|
||||
emailUtils.sendAdminRegistrationEmail(repository, authentication);
|
||||
} else {
|
||||
|
@ -538,8 +677,8 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void deleteRepositoryInterface(String id ,
|
||||
String registeredBy){
|
||||
public void deleteRepositoryInterface(String id,
|
||||
String registeredBy) {
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/api/")
|
||||
.path("/{id}")
|
||||
|
@ -555,17 +694,17 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
String comment, RepositoryInterface repositoryInterface) throws Exception {
|
||||
try {
|
||||
Repository e = this.getRepositoryById(repoId);
|
||||
repositoryInterface = createRepositoryInterface(e,repositoryInterface,datatype);
|
||||
String json_interface = Converter.repositoryInterfaceObjectToJson(e,repositoryInterface);
|
||||
repositoryInterface = createRepositoryInterface(e, repositoryInterface, datatype);
|
||||
String json_interface = Converter.repositoryInterfaceObjectToJson(e, repositoryInterface);
|
||||
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/api/add/")
|
||||
.build()
|
||||
.encode();
|
||||
|
||||
HttpEntity<String> httpEntity = new HttpEntity <> (json_interface,httpHeaders);
|
||||
HttpEntity<String> httpEntity = new HttpEntity<>(json_interface, httpHeaders);
|
||||
|
||||
restTemplate.postForObject(uriComponents.toUri(),httpEntity, String.class);
|
||||
restTemplate.postForObject(uriComponents.toUri(), httpEntity, String.class);
|
||||
|
||||
emailUtils.sendAdminRegisterInterfaceEmail(e, comment, repositoryInterface, SecurityContextHolder.getContext().getAuthentication());
|
||||
emailUtils.sendUserRegisterInterfaceEmail(e, comment, repositoryInterface, SecurityContextHolder.getContext().getAuthentication());
|
||||
|
@ -575,7 +714,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
return repositoryInterface;
|
||||
|
||||
} catch (Exception e) {
|
||||
LOGGER.error("Exception on addRepositoryInterface" , e);
|
||||
LOGGER.error("Exception on addRepositoryInterface", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -586,14 +725,19 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
String registeredBy,
|
||||
String comment, RepositoryInterface repositoryInterface) throws Exception {
|
||||
|
||||
this.updateBaseUrl(repoId,repositoryInterface.getId(),repositoryInterface.getBaseUrl());
|
||||
this.updateCompliance(repoId,repositoryInterface.getId(),repositoryInterface.getCompliance());
|
||||
this.updateValidationSet(repoId,repositoryInterface.getId(),repositoryInterface.getAccessSet());
|
||||
this.updateBaseUrl(repoId, repositoryInterface.getId(), repositoryInterface.getBaseUrl());
|
||||
this.updateCompliance(repoId, repositoryInterface.getId(), repositoryInterface.getCompliance());
|
||||
this.updateValidationSet(repoId, repositoryInterface.getId(), repositoryInterface.getAccessSet());
|
||||
|
||||
Repository e = this.getRepositoryById(repoId);
|
||||
emailUtils.sendAdminUpdateInterfaceEmail(e, comment, repositoryInterface, SecurityContextHolder.getContext().getAuthentication());
|
||||
emailUtils.sendUserUpdateInterfaceEmail(e, comment, repositoryInterface, SecurityContextHolder.getContext().getAuthentication());
|
||||
submitInterfaceValidation(getRepositoryById(repoId),registeredBy,repositoryInterface,true);
|
||||
Repository repository = this.getRepositoryById(repoId);
|
||||
try {
|
||||
emailUtils.sendAdminUpdateInterfaceEmail(repository, comment, repositoryInterface, SecurityContextHolder.getContext().getAuthentication());
|
||||
emailUtils.sendUserUpdateInterfaceEmail(repository, comment, repositoryInterface, SecurityContextHolder.getContext().getAuthentication());
|
||||
} catch (Exception e) {
|
||||
LOGGER.warn("Could not send emails", e);
|
||||
}
|
||||
|
||||
submitInterfaceValidation(getRepositoryById(repoId), registeredBy, repositoryInterface, true);
|
||||
|
||||
return repositoryInterface;
|
||||
}
|
||||
|
@ -665,25 +809,25 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
|
||||
@Override
|
||||
public List<Timezone> getTimezones() {
|
||||
List<String> timezones = Converter.readFile("timezones.txt");
|
||||
List<String> timezones = Converter.readFile("timezones.txt");
|
||||
return Converter.toTimezones(timezones);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getUrlsOfUserRepos(String userEmail,
|
||||
String page,
|
||||
String size){
|
||||
String size) {
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/api/baseurl/")
|
||||
.path("/{page}/{size}")
|
||||
.build().expand(page,size).encode();
|
||||
.build().expand(page, size).encode();
|
||||
|
||||
try{
|
||||
try {
|
||||
RequestFilter requestFilter = new RequestFilter();
|
||||
requestFilter.setRegisteredby(userEmail);
|
||||
return Arrays.asList(restTemplate.postForObject(uriComponents.toUri(),requestFilter, String[].class));
|
||||
}catch (Exception e){
|
||||
LOGGER.debug("Exception on addRepositoryInterface" , e);
|
||||
return Arrays.asList(restTemplate.postForObject(uriComponents.toUri(), requestFilter, String[].class));
|
||||
} catch (Exception e) {
|
||||
LOGGER.debug("Exception on addRepositoryInterface", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -723,7 +867,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
|
||||
|
||||
@Override
|
||||
public Map<String, String> getCompatibilityClasses(String mode) {
|
||||
public Map<String, String> getCompatibilityClasses(String mode) {
|
||||
|
||||
LOGGER.debug("Getting compatibility classes for mode: " + mode);
|
||||
Map<String, String> retMap = new HashMap<String, String>();
|
||||
|
@ -752,7 +896,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Map<String, String> getDatasourceClasses(String mode) {
|
||||
public Map<String, String> getDatasourceClasses(String mode) {
|
||||
|
||||
LOGGER.debug("Getting datasource classes for mode: " + mode);
|
||||
|
||||
|
@ -773,16 +917,16 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
retMap.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
return filterResults(retMap,mode);
|
||||
return filterResults(retMap, mode);
|
||||
|
||||
}
|
||||
|
||||
private Map<String,String> filterResults(Map<String, String> map,String mode) {
|
||||
private Map<String, String> filterResults(Map<String, String> map, String mode) {
|
||||
|
||||
HashMap<String,String> filteredMap = new HashMap<>();
|
||||
for(String key:map.keySet())
|
||||
if(dataSourceClass.get(mode).contains(key))
|
||||
filteredMap.put(key,map.get(key));
|
||||
HashMap<String, String> filteredMap = new HashMap<>();
|
||||
for (String key : map.keySet())
|
||||
if (dataSourceClass.get(mode).contains(key))
|
||||
filteredMap.put(key, map.get(key));
|
||||
|
||||
return filteredMap;
|
||||
}
|
||||
|
@ -810,23 +954,23 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
|
||||
@Override
|
||||
public Map<String, String> getListLatestUpdate(String mode) throws JSONException {
|
||||
if(mode.equals("opendoar"))
|
||||
return Collections.singletonMap("lastCollectionDate", getRepositoryInterface("openaire____::"+mode).get(0).getLastCollectionDate());
|
||||
if (mode.equals("opendoar"))
|
||||
return Collections.singletonMap("lastCollectionDate", getRepositoryInterface("openaire____::" + mode).get(0).getLastCollectionDate());
|
||||
else
|
||||
/*
|
||||
* first api of re3data has null value on collection date
|
||||
* */
|
||||
return Collections.singletonMap("lastCollectionDate", getRepositoryInterface("openaire____::"+mode).get(1).getLastCollectionDate());
|
||||
* first api of re3data has null value on collection date
|
||||
* */
|
||||
return Collections.singletonMap("lastCollectionDate", getRepositoryInterface("openaire____::" + mode).get(1).getLastCollectionDate());
|
||||
}
|
||||
|
||||
private void updateValidationSet(String repositoryId, String repositoryInterfaceId, String validationSet) throws Exception {
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/api/oaiset")
|
||||
.queryParam("dsId",repositoryId)
|
||||
.queryParam("apiId",repositoryInterfaceId)
|
||||
.queryParam("oaiSet",validationSet)
|
||||
.queryParam("dsId", repositoryId)
|
||||
.queryParam("apiId", repositoryInterfaceId)
|
||||
.queryParam("oaiSet", validationSet)
|
||||
.build().encode();
|
||||
restTemplate.exchange(uriComponents.toUri(),HttpMethod.POST, null, ResponseEntity.class);
|
||||
restTemplate.exchange(uriComponents.toUri(), HttpMethod.POST, null, ResponseEntity.class);
|
||||
|
||||
}
|
||||
|
||||
|
@ -834,21 +978,21 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
private void updateBaseUrl(String repositoryId, String repositoryInterfaceId, String baseUrl) {
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/api/baseurl")
|
||||
.queryParam("dsId",repositoryId)
|
||||
.queryParam("apiId",repositoryInterfaceId)
|
||||
.queryParam("baseUrl",baseUrl)
|
||||
.queryParam("dsId", repositoryId)
|
||||
.queryParam("apiId", repositoryInterfaceId)
|
||||
.queryParam("baseUrl", baseUrl)
|
||||
.build().encode();
|
||||
restTemplate.postForObject(uriComponents.toUri(),null,String.class);
|
||||
restTemplate.postForObject(uriComponents.toUri(), null, String.class);
|
||||
}
|
||||
|
||||
private void updateCompliance(String repositoryId, String repositoryInterfaceId,String compliance) {
|
||||
private void updateCompliance(String repositoryId, String repositoryInterfaceId, String compliance) {
|
||||
UriComponents uriComponents = UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/api/compliance")
|
||||
.queryParam("dsId",repositoryId)
|
||||
.queryParam("apiId",repositoryInterfaceId)
|
||||
.queryParam("compliance",compliance)
|
||||
.queryParam("dsId", repositoryId)
|
||||
.queryParam("apiId", repositoryInterfaceId)
|
||||
.queryParam("compliance", compliance)
|
||||
.build().encode();
|
||||
restTemplate.postForObject(uriComponents.toUri(),null,String.class);
|
||||
restTemplate.postForObject(uriComponents.toUri(), null, String.class);
|
||||
}
|
||||
|
||||
private MetricsNumbers getMetricsNumbers(String openAIREID) throws BrokerException {
|
||||
|
@ -869,7 +1013,7 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
new ParameterizedTypeReference<MetricsNumbers>() {
|
||||
});
|
||||
} catch (RestClientException e) {
|
||||
LOGGER.debug("Exception on getMetricsNumbers" , e);
|
||||
LOGGER.debug("Exception on getMetricsNumbers", e);
|
||||
emailUtils.reportException(e);
|
||||
throw e;
|
||||
}
|
||||
|
@ -886,39 +1030,58 @@ public class RepositoryServiceImpl implements RepositoryService {
|
|||
return null;
|
||||
}
|
||||
|
||||
private UriComponents searchDatasource(String page,String size){
|
||||
private UriComponents searchDatasource(String page, String size) {
|
||||
|
||||
return UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/search/")
|
||||
.path("/{page}/{size}/")
|
||||
.queryParam("requestSortBy","officialname")
|
||||
.queryParam("order","ASCENDING")
|
||||
.queryParam("requestSortBy", "officialname")
|
||||
.queryParam("order", "ASCENDING")
|
||||
.build().expand(page, size).encode();
|
||||
}
|
||||
|
||||
private UriComponents searchSnipperDatasource(String page,String size){
|
||||
private UriComponents searchSnipperDatasource(String page, String size) {
|
||||
|
||||
return UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/searchsnippet/")
|
||||
.path("/{page}/{size}/")
|
||||
.queryParam("requestSortBy","officialname")
|
||||
.queryParam("order","ASCENDING")
|
||||
.queryParam("requestSortBy", "officialname")
|
||||
.queryParam("order", "ASCENDING")
|
||||
.build().expand(page, size).encode();
|
||||
}
|
||||
|
||||
private UriComponents searchRegisteredDatasource(String requestSortBy, String order, String page,String size){
|
||||
private UriComponents searchRegisteredDatasource(String requestSortBy, String order, String page, String size) {
|
||||
|
||||
return UriComponentsBuilder
|
||||
.fromHttpUrl(baseAddress + "/ds/searchregistered/")
|
||||
.path("/{page}/{size}/")
|
||||
.queryParam("requestSortBy",requestSortBy)
|
||||
.queryParam("order",order)
|
||||
.queryParam("requestSortBy", requestSortBy)
|
||||
.queryParam("order", order)
|
||||
.build().expand(page, size).encode();
|
||||
}
|
||||
|
||||
private String getRepositoryType(String typology){
|
||||
private String getRepositoryType(String typology) {
|
||||
return invertedDataSourceClass.get(typology);
|
||||
}
|
||||
|
||||
private List<String> getRoleIdsFromUserRoles(String userEmail) {
|
||||
Integer coPersonId = registryCalls.getCoPersonIdByEmail(userEmail);
|
||||
JsonArray roles;
|
||||
ArrayList<String> roleIds = new ArrayList<>();
|
||||
ArrayList<Integer> couIds = new ArrayList<>();
|
||||
if (coPersonId != null) {
|
||||
roles = registryCalls.getRolesWithStatus(coPersonId, AaiRegistryService.RoleStatus.ACTIVE);
|
||||
for (JsonElement role : roles) {
|
||||
JsonObject object = role.getAsJsonObject();
|
||||
if (object.get("CouId") == null) {
|
||||
continue;
|
||||
}
|
||||
couIds.add(object.get("CouId").getAsInt());
|
||||
}
|
||||
|
||||
roleIds.addAll(registryCalls.getCouNames(couIds).values());
|
||||
|
||||
}
|
||||
return roleIds;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public class SushiliteServiceImpl implements SushiliteService {
|
|||
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public ReportResponseWrapper getReportResults(String page,
|
||||
String pageSize,
|
||||
String Report,
|
||||
|
|
|
@ -127,7 +127,7 @@ public class ValidatorServiceImpl implements ValidatorService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_USER') and #jobForValidation.userEmail == authentication.userInfo.email")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER') and #jobForValidation.userEmail == authentication.userInfo.email")
|
||||
public JobForValidation submitJobForValidation(JobForValidation jobForValidation) throws ValidatorServiceException {
|
||||
LOGGER.debug("Submit job for validation with id : " + jobForValidation.getDatasourceId());
|
||||
try {
|
||||
|
@ -155,7 +155,7 @@ public class ValidatorServiceImpl implements ValidatorService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_USER') and #email == authentication.userInfo.email")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER') and #email == authentication.userInfo.email")
|
||||
public ResponseEntity<Object> reSubmitJobForValidation(String email,
|
||||
String jobId) throws JSONException, ValidatorServiceException {
|
||||
LOGGER.debug("Resubmit validation job with id : " + jobId);
|
||||
|
@ -242,7 +242,7 @@ public class ValidatorServiceImpl implements ValidatorService {
|
|||
}
|
||||
|
||||
@Override
|
||||
@PreAuthorize("hasRole('ROLE_USER')")
|
||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||
public List<StoredJob> getStoredJobsNew(String user,
|
||||
String jobType,
|
||||
String offset,
|
||||
|
|
|
@ -0,0 +1,285 @@
|
|||
package eu.dnetlib.repo.manager.service.aai.registry;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface AaiRegistryService {
|
||||
|
||||
/**
|
||||
* 1.1 Get CoPersonId by authenticated user's Email
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
Integer getCoPersonIdByEmail();
|
||||
|
||||
/**
|
||||
* 1.2 Get CoPersonId by Email
|
||||
*
|
||||
* @param email
|
||||
* @return
|
||||
*/
|
||||
Integer getCoPersonIdByEmail(String email);
|
||||
|
||||
/**
|
||||
* 1. Get CoPersonId List by Email
|
||||
*
|
||||
* @param email
|
||||
* @return
|
||||
*/
|
||||
List<Integer> getCoPersonIdsByEmail(String email);
|
||||
|
||||
/**
|
||||
* 2. Get CoPersonId by AAI identifier
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
Integer getCoPersonIdByIdentifier();
|
||||
|
||||
/**
|
||||
* 3.1 Get OpenAIRE cous with a specific name(or substring)
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
JsonArray getCous(String name);
|
||||
|
||||
/**
|
||||
* 3.2 Get all OpenAIRE cous
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
JsonArray getCous();
|
||||
|
||||
/**
|
||||
* 4.1 Get a couId by name
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
Integer getCouId(String name);
|
||||
|
||||
/**
|
||||
* 4.2 Get a couId by type.id with/without mapping type
|
||||
*
|
||||
* @param type
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Integer getCouId(String type, String id, boolean communityMap);
|
||||
|
||||
/**
|
||||
* 4.3 Get a couId by type.id with mapping type
|
||||
*
|
||||
* @param type
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
Integer getCouId(String type, String id);
|
||||
|
||||
/**
|
||||
* 5. Get User non admin roles
|
||||
*
|
||||
* @param coPersonId
|
||||
* @return
|
||||
*/
|
||||
JsonArray getRoles(Integer coPersonId);
|
||||
|
||||
/**
|
||||
* 5.2 Get User non admin active roles
|
||||
*
|
||||
* @param coPersonId
|
||||
* @return
|
||||
*/
|
||||
JsonArray getRolesWithStatus(Integer coPersonId, RoleStatus status);
|
||||
|
||||
/**
|
||||
* 6. Get Role id of User base on couId.
|
||||
*
|
||||
* @param coPersonId
|
||||
* @param couId
|
||||
* @return
|
||||
*/
|
||||
Integer getRoleId(Integer coPersonId, Integer couId);
|
||||
|
||||
/**
|
||||
* 7. Get User Groups
|
||||
*
|
||||
* @param coPersonId
|
||||
* @return
|
||||
*/
|
||||
JsonArray getUserGroups(Integer coPersonId);
|
||||
|
||||
/**
|
||||
* 8. Get User Admin Group of a Cou
|
||||
*
|
||||
* @param coPersonId
|
||||
* @param couId
|
||||
* @return
|
||||
*/
|
||||
JsonObject getUserAdminGroup(Integer coPersonId, Integer couId);
|
||||
|
||||
/**
|
||||
* 9. Get Groups of a Cou
|
||||
*
|
||||
* @param couId
|
||||
* @return
|
||||
*/
|
||||
JsonArray getCouGroups(Integer couId);
|
||||
|
||||
/**
|
||||
* 10. Get Admin Group of a Cou
|
||||
*
|
||||
* @param couId
|
||||
* @return
|
||||
*/
|
||||
JsonObject getCouAdminGroup(Integer couId);
|
||||
|
||||
/**
|
||||
* 11. Get users of a group
|
||||
*
|
||||
* @param coGroupId
|
||||
* @return
|
||||
*/
|
||||
JsonArray getGroupMembers(Integer coGroupId);
|
||||
|
||||
|
||||
/**
|
||||
* 12. Get Users' email of a Cou
|
||||
*
|
||||
* @param couId
|
||||
* @param admin
|
||||
* @return
|
||||
*/
|
||||
JsonArray getUserEmailByCouId(Integer couId, boolean admin);
|
||||
|
||||
/**
|
||||
* 12.2 Get All Users that have a specific role // TODO: Keep or delete
|
||||
*
|
||||
* @param couId
|
||||
* @return
|
||||
*/
|
||||
JsonArray getUsersByCouId(Integer couId);
|
||||
|
||||
/**
|
||||
* 13. Get Users' names of a Cou
|
||||
*
|
||||
* @param couId
|
||||
* @param admin
|
||||
* @return
|
||||
*/
|
||||
JsonArray getUserNamesByCouId(Integer couId, boolean admin);
|
||||
|
||||
/**
|
||||
* 14. Get Users' identifiers of a Cou
|
||||
*
|
||||
* @param couId
|
||||
* @param admin
|
||||
* @return
|
||||
*/
|
||||
JsonArray getUserIdByCouId(Integer couId, boolean admin);
|
||||
|
||||
/**
|
||||
* 15. Assign a member role to a User
|
||||
*
|
||||
* @param coPersonId
|
||||
* @param couId
|
||||
* @param id
|
||||
*/
|
||||
void assignMemberRole(Integer coPersonId, Integer couId, Integer id);
|
||||
|
||||
/**
|
||||
* 16. Remove a member role from a User
|
||||
*
|
||||
* @param coPersonId
|
||||
* @param couId
|
||||
* @param id
|
||||
*/
|
||||
void removeMemberRole(Integer coPersonId, Integer couId, Integer id);
|
||||
|
||||
/**
|
||||
* 17. Create a new role
|
||||
*
|
||||
* @param role
|
||||
* @return
|
||||
*/
|
||||
Integer createRole(Role role);
|
||||
|
||||
/**
|
||||
* 18. Get User's email
|
||||
*
|
||||
* @param coPersonId
|
||||
* @return
|
||||
*/
|
||||
String getUserEmail(Integer coPersonId);
|
||||
|
||||
/**
|
||||
* 19. Get User's names
|
||||
*
|
||||
* @param coPersonId
|
||||
* @return
|
||||
*/
|
||||
String getUserNames(Integer coPersonId);
|
||||
|
||||
/**
|
||||
* 20. Get User's identifier
|
||||
*
|
||||
* @param coPersonId
|
||||
* @return
|
||||
*/
|
||||
String getUserId(Integer coPersonId);
|
||||
|
||||
/**
|
||||
* 21. Assign an admin role to a User
|
||||
*
|
||||
* @param coPersonId
|
||||
* @param couId
|
||||
*/
|
||||
void assignAdminRole(Integer coPersonId, Integer couId);
|
||||
|
||||
/**
|
||||
* 22. Remove an admin role from a User
|
||||
*
|
||||
* @param coPersonId
|
||||
* @param couId
|
||||
*/
|
||||
void removeAdminRole(Integer coPersonId, Integer couId);
|
||||
|
||||
/**
|
||||
* 23. Get a cou Names from couIds.
|
||||
*
|
||||
* @param couIds
|
||||
* @return
|
||||
*/
|
||||
Map<Integer, String> getCouNames(List<Integer> couIds);
|
||||
|
||||
// TODO: add description
|
||||
List<User> getUsers(Integer couId);
|
||||
|
||||
enum RoleStatus {
|
||||
ACTIVE("Active"),
|
||||
APPROVED("Approved"),
|
||||
CONFIRMED("Confirmed"),
|
||||
DECLINED("Declined"),
|
||||
DELETED("Deleted"),
|
||||
DENIED("Denied"),
|
||||
DUPLICATE("Duplicate"),
|
||||
EXPIRED("Expired"),
|
||||
GRACE_PERIOD("GracePeriod"),
|
||||
INVITED("Invited"),
|
||||
PENDING("Pending"),
|
||||
PENDING_APPROVAL("PendingApproval"),
|
||||
PENDING_CONFIRMATION("PendingConfirmation"),
|
||||
SUSPENDED("Suspended");
|
||||
|
||||
public final String status;
|
||||
|
||||
RoleStatus(String status) {
|
||||
this.status = status;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,439 @@
|
|||
package eu.dnetlib.repo.manager.service.aai.registry;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
import eu.dnetlib.repo.manager.service.aai.registry.utils.RegistryUtils;
|
||||
import eu.dnetlib.repo.manager.utils.HttpUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class RegistryCalls implements AaiRegistryService {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(RegistryCalls.class);
|
||||
|
||||
private final String coid;
|
||||
public final HttpUtils httpUtils;
|
||||
public final RegistryUtils jsonUtils;
|
||||
|
||||
@Autowired
|
||||
RegistryCalls(@Value("${aai.registry.coid:2}") String coid,
|
||||
HttpUtils httpUtils, RegistryUtils registryUtils) {
|
||||
this.coid = coid;
|
||||
this.httpUtils = httpUtils;
|
||||
this.jsonUtils = registryUtils;
|
||||
}
|
||||
|
||||
private String mapType(String type, boolean communityMap) {
|
||||
if (type.equals("organization")) {
|
||||
type = "institution";
|
||||
} else if (type.equals("ri") && communityMap) {
|
||||
type = "community";
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getCoPersonIdByEmail() {
|
||||
try {
|
||||
OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
String email = authentication.getUserInfo().getEmail();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
params.put("mail", email);
|
||||
JsonElement response = httpUtils.get("co_people.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null;
|
||||
} catch (Exception e) {
|
||||
logger.error("Get User info: An error occurred ", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getCoPersonIdByEmail(String email) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
params.put("mail", email);
|
||||
JsonElement response = httpUtils.get("co_people.json", params);
|
||||
if (response != null) {
|
||||
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray();
|
||||
if (coPeople.size() > 0) {
|
||||
return coPeople.get(0).getAsJsonObject().get("Id").getAsInt();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Integer> getCoPersonIdsByEmail(String email) {
|
||||
List<Integer> coPersonIds = new ArrayList<>();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
params.put("mail", email);
|
||||
JsonElement response = httpUtils.get("co_people.json", params);
|
||||
if (response != null) {
|
||||
JsonArray coPeople = response.getAsJsonObject().get("CoPeople").getAsJsonArray();
|
||||
for (int i = 0; i < coPeople.size(); i++) {
|
||||
coPersonIds.add(coPeople.get(i).getAsJsonObject().get("Id").getAsInt());
|
||||
}
|
||||
}
|
||||
return coPersonIds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getCoPersonIdByIdentifier() {
|
||||
try {
|
||||
OIDCAuthenticationToken authentication = (OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
String sub = authentication.getUserInfo().getSub();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
params.put("search.identifier", sub);
|
||||
JsonElement response = httpUtils.get("co_people.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null;
|
||||
} catch (Exception e) {
|
||||
logger.error("Get User info: An error occurred ", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Integer getCoPersonIdByIdentifier(String sub) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
params.put("search.identifier", sub);
|
||||
JsonElement response = httpUtils.get("co_people.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoPeople").getAsJsonArray().get(0).getAsJsonObject().get("Id").getAsInt() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getCous(String name) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
if (name != null) {
|
||||
params.put("name", URLEncoder.encode(name).toLowerCase());
|
||||
}
|
||||
JsonElement response = httpUtils.get("cous.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("Cous").getAsJsonArray() : new JsonArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getCous() {
|
||||
return getCous(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getCouId(String name) {
|
||||
JsonArray cous = getCous(name);
|
||||
for (JsonElement cou : cous) {
|
||||
if (cou.getAsJsonObject().get("Name").getAsString().equalsIgnoreCase(name)) {
|
||||
return cou.getAsJsonObject().get("Id").getAsInt();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getCouId(String type, String id, boolean communityMap) {
|
||||
return getCouId(mapType(type, communityMap) + "." + id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getCouId(String type, String id) {
|
||||
return getCouId(type, id, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getRoles(Integer coPersonId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("copersonid", coPersonId.toString());
|
||||
JsonElement response = httpUtils.get("co_person_roles.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoPersonRoles").getAsJsonArray() : new JsonArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getRolesWithStatus(Integer coPersonId, RoleStatus status) {
|
||||
JsonArray roles = getRoles(coPersonId);
|
||||
if (status == null) {
|
||||
return roles;
|
||||
}
|
||||
JsonArray activeRoles = new JsonArray();
|
||||
for (JsonElement role : roles) {
|
||||
if (role.getAsJsonObject().get("Status").getAsString().equalsIgnoreCase(status.toString())) {
|
||||
activeRoles.add(role);
|
||||
}
|
||||
}
|
||||
return activeRoles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getRoleId(Integer coPersonId, Integer couId) {
|
||||
JsonArray roles = getRoles(coPersonId);
|
||||
for (JsonElement role : roles) {
|
||||
JsonObject object = role.getAsJsonObject();
|
||||
if (object.get("CouId").getAsInt() == couId && !object.get("Status").getAsString().equals("Deleted")) {
|
||||
return object.get("Id").getAsInt();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getUserGroups(Integer coPersonId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("copersonid", coPersonId.toString());
|
||||
JsonElement response = httpUtils.get("co_groups.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoGroups").getAsJsonArray() : new JsonArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonObject getUserAdminGroup(Integer coPersonId, Integer couId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("copersonid", coPersonId.toString());
|
||||
JsonElement response = httpUtils.get("co_groups.json", params);
|
||||
JsonArray roles = (response != null) ? response.getAsJsonObject().get("CoGroups").getAsJsonArray() : new JsonArray();
|
||||
for (JsonElement role : roles) {
|
||||
JsonObject object = role.getAsJsonObject();
|
||||
if (object.get("CouId") != null && object.get("CouId").getAsInt() == couId) {
|
||||
if (object.get("Name").getAsString().contains("admins")) {
|
||||
return object;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getCouGroups(Integer couId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("coid", coid);
|
||||
params.put("couid", couId.toString());
|
||||
JsonElement response = httpUtils.get("co_groups.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoGroups").getAsJsonArray() : new JsonArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonObject getCouAdminGroup(Integer couId) {
|
||||
JsonArray groups = getCouGroups(couId);
|
||||
for (JsonElement group : groups) {
|
||||
if (group.getAsJsonObject().get("Name").getAsString().contains("admins")) {
|
||||
return group.getAsJsonObject();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getGroupMembers(Integer coGroupId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("cogroupid", coGroupId.toString());
|
||||
JsonElement response = httpUtils.get("co_group_members.json", params);
|
||||
return (response != null) ? response.getAsJsonObject().get("CoGroupMembers").getAsJsonArray() : new JsonArray();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public JsonArray getUserEmailByCouId(Integer couId, boolean admin) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
if (couId == null) {
|
||||
throw new IllegalArgumentException("Provided 'couId' is null");
|
||||
}
|
||||
params.put("couid", couId.toString());
|
||||
if (admin) {
|
||||
params.put("admin", "true");
|
||||
}
|
||||
JsonElement response = httpUtils.get("email_addresses.json", params);
|
||||
JsonArray infos = (response != null) ? response.getAsJsonObject().get("EmailAddresses").getAsJsonArray() : new JsonArray();
|
||||
JsonArray emails = new JsonArray();
|
||||
infos.forEach(info -> {
|
||||
JsonObject user = new JsonObject();
|
||||
boolean add = true;
|
||||
String email = info.getAsJsonObject().get("Mail").getAsString();
|
||||
for (JsonElement element : emails) {
|
||||
if (element.getAsJsonObject().get("email").getAsString().equals(email)) {
|
||||
add = false;
|
||||
}
|
||||
}
|
||||
if (add) {
|
||||
user.addProperty("email", email);
|
||||
user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString());
|
||||
emails.add(user);
|
||||
}
|
||||
});
|
||||
return emails;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getUsersByCouId(Integer couId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("couid", couId.toString());
|
||||
JsonElement response = httpUtils.get("co_person_roles.json", params);
|
||||
JsonArray infos = (response != null) ? response.getAsJsonObject().get("CoPersonRoles").getAsJsonArray() : new JsonArray();
|
||||
// JsonArray users = new JsonArray();
|
||||
// infos.forEach(info -> {
|
||||
// JsonObject user = new JsonObject();
|
||||
// user.addProperty("email", info.getAsJsonObject().get("Mail").getAsString());
|
||||
// user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString());
|
||||
// emails.add(user);
|
||||
// });
|
||||
return infos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<User> getUsers(Integer couId) {
|
||||
List<User> users = new ArrayList<>();
|
||||
JsonArray infos = getUserEmailByCouId(couId, false);
|
||||
|
||||
infos.forEach(info -> {
|
||||
User user = new User();
|
||||
user.setEmail(info.getAsJsonObject().get("email").getAsString());
|
||||
|
||||
users.add(user);
|
||||
});
|
||||
return users;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getUserNamesByCouId(Integer couId, boolean admin) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("couid", couId.toString());
|
||||
if (admin) {
|
||||
params.put("admin", "true");
|
||||
}
|
||||
JsonElement response = httpUtils.get("names.json", params);
|
||||
JsonArray infos = (response != null) ? response.getAsJsonObject().get("Names").getAsJsonArray() : new JsonArray();
|
||||
JsonArray names = new JsonArray();
|
||||
infos.forEach(info -> {
|
||||
JsonObject user = new JsonObject();
|
||||
user.addProperty("name", info.getAsJsonObject().get("Given").getAsString() + " " + info.getAsJsonObject().get("Family").getAsString());
|
||||
user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString());
|
||||
names.add(user);
|
||||
});
|
||||
return names;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonArray getUserIdByCouId(Integer couId, boolean admin) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("couid", couId.toString());
|
||||
if (admin) {
|
||||
params.put("admin", "true");
|
||||
}
|
||||
JsonElement response = httpUtils.get("identifiers.json", params);
|
||||
JsonArray infos = (response != null) ? response.getAsJsonObject().get("Identifiers").getAsJsonArray() : new JsonArray();
|
||||
JsonArray emails = new JsonArray();
|
||||
infos.forEach(info -> {
|
||||
JsonObject user = new JsonObject();
|
||||
user.addProperty("id", info.getAsJsonObject().get("Identifier").getAsString());
|
||||
user.addProperty("memberSince", info.getAsJsonObject().get("Created").getAsString());
|
||||
emails.add(user);
|
||||
});
|
||||
return emails;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void assignMemberRole(Integer coPersonId, Integer couId, Integer id) {
|
||||
if (id != null) {
|
||||
httpUtils.put("co_person_roles/" + id.toString() + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Active"));
|
||||
} else {
|
||||
httpUtils.post("co_person_roles.json", jsonUtils.coPersonRoles(coPersonId, couId, "Active"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeMemberRole(Integer coPersonId, Integer couId, Integer id) {
|
||||
if (id != null) {
|
||||
httpUtils.put("co_person_roles/" + id.toString() + ".json", jsonUtils.coPersonRoles(coPersonId, couId, "Deleted"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer createRole(Role role) {
|
||||
JsonElement element = httpUtils.post("cous.json", jsonUtils.createNewCou(role));
|
||||
return element.getAsJsonObject().get("Id").getAsInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserEmail(Integer coPersonId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("copersonid", coPersonId.toString());
|
||||
JsonElement response = httpUtils.get("email_addresses.json", params);
|
||||
JsonObject info = (response != null) ? response.getAsJsonObject().get("EmailAddresses").getAsJsonArray().get(0).getAsJsonObject() : null;
|
||||
return (info != null) ? info.getAsJsonObject().get("Mail").getAsString() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserNames(Integer coPersonId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("copersonid", coPersonId.toString());
|
||||
JsonElement response = httpUtils.get("names.json", params);
|
||||
JsonObject info = (response != null) ? response.getAsJsonObject().get("Names").getAsJsonArray().get(0).getAsJsonObject() : null;
|
||||
return (info != null) ? info.getAsJsonObject().get("Given").getAsString() + " " + info.getAsJsonObject().get("Family").getAsString() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUserId(Integer coPersonId) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("copersonid", coPersonId.toString());
|
||||
JsonElement response = httpUtils.get("identifiers.json", params);
|
||||
JsonObject info = (response != null) ? response.getAsJsonObject().get("Identifiers").getAsJsonArray().get(0).getAsJsonObject() : null;
|
||||
return (info != null) ? info.getAsJsonObject().get("Identifier").getAsString() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void assignAdminRole(Integer coPersonId, Integer couId) {
|
||||
JsonObject group = getCouAdminGroup(couId);
|
||||
if (group != null) {
|
||||
httpUtils.post("co_group_members.json", jsonUtils.coGroupMembers(group.get("Id").getAsInt(), coPersonId, true));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAdminRole(Integer coPersonId, Integer couId) {
|
||||
JsonObject adminGroup = this.getCouAdminGroup(couId);
|
||||
JsonArray admins = this.getGroupMembers(adminGroup.get("Id").getAsInt());
|
||||
Integer id = null;
|
||||
for (JsonElement admin : admins) {
|
||||
if (admin.getAsJsonObject().get("Person").getAsJsonObject().get("Id").getAsInt() == coPersonId) {
|
||||
id = admin.getAsJsonObject().get("Id").getAsInt();
|
||||
}
|
||||
}
|
||||
if (id != null) {
|
||||
httpUtils.delete("co_group_members/" + id.toString() + ".json");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Integer, String> getCouNames(List<Integer> couIds) {
|
||||
Map<Integer, String> idNameMap = new HashMap<>();
|
||||
for (Integer id : couIds) {
|
||||
idNameMap.put(id, null);
|
||||
}
|
||||
|
||||
JsonArray cous = getCous();
|
||||
int count = 0;
|
||||
int total = couIds.size();
|
||||
for (JsonElement cou : cous) {
|
||||
if (count < total) {
|
||||
if (idNameMap.containsKey(cou.getAsJsonObject().get("Id").getAsInt())) {
|
||||
idNameMap.put(cou.getAsJsonObject().get("Id").getAsInt(), cou.getAsJsonObject().get("Name").getAsString());
|
||||
count++;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return idNameMap;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package eu.dnetlib.repo.manager.service.aai.registry.utils;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import eu.dnetlib.repo.manager.domain.dto.Role;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class RegistryUtils {
|
||||
|
||||
@Value("1.0")
|
||||
private String version;
|
||||
|
||||
@Value("2")
|
||||
private String coid;
|
||||
|
||||
public JsonObject coPersonRoles(Integer coPersonId, Integer couId, String status) {
|
||||
JsonObject role = new JsonObject();
|
||||
JsonArray coPersonRoles = new JsonArray();
|
||||
JsonObject coPersonRole = new JsonObject();
|
||||
JsonObject person = new JsonObject();
|
||||
person.addProperty("Type", "CO");
|
||||
person.addProperty("Id", coPersonId.toString());
|
||||
coPersonRole.addProperty("Version", version);
|
||||
coPersonRole.add("Person", person);
|
||||
coPersonRole.addProperty("CouId", couId.toString());
|
||||
coPersonRole.addProperty("Affiliation", "member");
|
||||
coPersonRole.addProperty("Title", "");
|
||||
coPersonRole.addProperty("O", "Openaire");
|
||||
coPersonRole.addProperty("Status", status);
|
||||
coPersonRole.addProperty("ValidFrom", "");
|
||||
coPersonRole.addProperty("ValidThrough", "");
|
||||
coPersonRoles.add(coPersonRole);
|
||||
role.addProperty("RequestType", "CoPersonRoles");
|
||||
role.addProperty("Version", version);
|
||||
role.add("CoPersonRoles", coPersonRoles);
|
||||
return role;
|
||||
}
|
||||
|
||||
public JsonObject createNewCou(Role role) {
|
||||
JsonObject cou = new JsonObject();
|
||||
JsonArray cous = new JsonArray();
|
||||
JsonObject newCou = new JsonObject();
|
||||
newCou.addProperty("Version", version);
|
||||
newCou.addProperty("CoId", coid);
|
||||
newCou.addProperty("Name", role.getName());
|
||||
newCou.addProperty("Description", role.getDescription());
|
||||
cous.add(newCou);
|
||||
cou.addProperty("RequestType", "Cous");
|
||||
cou.addProperty("Version", version);
|
||||
cou.add("Cous", cous);
|
||||
return cou;
|
||||
}
|
||||
|
||||
public JsonObject coGroupMembers(Integer coGroupId, Integer coPersonId, boolean member) {
|
||||
JsonObject coGroup = new JsonObject();
|
||||
JsonArray coGroupMembers = new JsonArray();
|
||||
JsonObject coGroupMember = new JsonObject();
|
||||
JsonObject person = new JsonObject();
|
||||
person.addProperty("Type", "CO");
|
||||
person.addProperty("Id", coPersonId.toString());
|
||||
coGroupMember.addProperty("Version", version);
|
||||
coGroupMember.add("Person", person);
|
||||
coGroupMember.addProperty("CoGroupId", coGroupId.toString());
|
||||
coGroupMember.addProperty("Member", member);
|
||||
coGroupMember.addProperty("Owner", false);
|
||||
coGroupMember.addProperty("ValidFrom", "");
|
||||
coGroupMember.addProperty("ValidThrough", "");
|
||||
coGroupMembers.add(coGroupMember);
|
||||
coGroup.addProperty("RequestType", "CoGroupMembers");
|
||||
coGroup.addProperty("Version", version);
|
||||
coGroup.add("CoGroupMembers", coGroupMembers);
|
||||
return coGroup;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,120 @@
|
|||
package eu.dnetlib.repo.manager.service.security;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service("roleMappingService")
|
||||
public class AaiRoleMappingService implements RoleMappingService {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AaiRoleMappingService.class);
|
||||
|
||||
@Value("${aai.registry.production:true}")
|
||||
private boolean production;
|
||||
|
||||
|
||||
private String createRepoRoleName(String prefix, String repoId) {
|
||||
return prefix + "." + repoId.replace(":", "$");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRepoNameWithoutType(String fullName, String prefix) {
|
||||
if (fullName != null && prefix != null && fullName.startsWith(prefix)) {
|
||||
return fullName.substring(prefix.length());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRepoIdByRoleId(String roleId) {
|
||||
if (!roleActive(roleId)) {
|
||||
return null;
|
||||
}
|
||||
return roleId.replaceFirst(".*datasource\\.", "").replace("$", ":");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getRepoIdsByRoleIds(Collection<String> roleIds) {
|
||||
return roleIds
|
||||
.stream()
|
||||
//.filter(this::roleActive) // implicitly executed in the next statement
|
||||
.map(this::getRepoIdByRoleId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRoleIdByRepoId(String repoId) {
|
||||
String roleId = "";
|
||||
String prefix = (production ? "" : "beta.") + "datasource";
|
||||
if (repoId != null) {
|
||||
roleId = createRepoRoleName(prefix, repoId);
|
||||
return roleId;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getRoleIdsByRepoIds(Collection<String> repoIds) {
|
||||
return repoIds
|
||||
.stream()
|
||||
.map(this::getRoleIdByRepoId)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertAuthorityIdToRepoId(String authorityId) {
|
||||
String repo = "";
|
||||
if (authorityId != null && roleActive(authorityId)) {
|
||||
repo = authorityId
|
||||
.replaceFirst(".*datasource\\.", "")
|
||||
.replace("$", ":")
|
||||
.toLowerCase();
|
||||
}
|
||||
return repo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertAuthorityToRepoId(GrantedAuthority authority) {
|
||||
return convertAuthorityIdToRepoId(authority.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertRepoIdToAuthorityId(String repoId) {
|
||||
StringBuilder roleBuilder = new StringBuilder();
|
||||
String role = "";
|
||||
if (repoId != null) {
|
||||
roleBuilder.append(production ? "" : "beta.");
|
||||
roleBuilder.append("datasource.");
|
||||
roleBuilder.append(repoId.replace(":", "$"));
|
||||
role = roleBuilder.toString().replace(".", "_").toUpperCase();
|
||||
}
|
||||
return role;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertRepoIdToEncodedAuthorityId(String repoId) {
|
||||
return URLEncoder.encode(convertRepoIdToAuthorityId(repoId));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SimpleGrantedAuthority convertRepoIdToAuthority(String repoId) {
|
||||
String role = convertRepoIdToEncodedAuthorityId(repoId);
|
||||
return new SimpleGrantedAuthority(role);
|
||||
}
|
||||
|
||||
private boolean roleActive(String roleId) {
|
||||
return (production && !roleId.toLowerCase().startsWith("beta."))
|
||||
|| (!production && roleId.toLowerCase().startsWith("beta."));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
package eu.dnetlib.repo.manager.service.security;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
|
||||
import java.net.URLDecoder;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AuthoritiesMapper {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AuthoritiesMapper.class);
|
||||
private static final String ENTITLEMENT_REGEX = "urn:geant:openaire[.]eu:group:([^:]*):?(.*)?:role=member#aai[.]openaire[.]eu";
|
||||
|
||||
private AuthoritiesMapper() {
|
||||
}
|
||||
|
||||
public static Collection<GrantedAuthority> map(JsonArray entitlements) {
|
||||
HashSet<GrantedAuthority> authorities = new HashSet<>();
|
||||
entityRoles(entitlements, authorities);
|
||||
return authorities;
|
||||
}
|
||||
|
||||
public static List<String> entitlementRoles(JsonArray entitlements) {
|
||||
List<String> roles = new ArrayList<>();
|
||||
if (entitlements != null) {
|
||||
for (JsonElement obj : entitlements) {
|
||||
Matcher matcher = Pattern.compile(ENTITLEMENT_REGEX).matcher(obj.getAsString());
|
||||
if (matcher.find()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (matcher.group(1) != null && matcher.group(1).length() > 0) {
|
||||
sb.append(matcher.group(1));
|
||||
}
|
||||
if (matcher.group(2).length() > 0) {
|
||||
sb.append(":");
|
||||
sb.append(matcher.group(2));
|
||||
}
|
||||
String role = sb.toString().replace("+", " ");
|
||||
roles.add(URLDecoder.decode(role));
|
||||
}
|
||||
}
|
||||
}
|
||||
return roles;
|
||||
}
|
||||
|
||||
private static void entityRoles(JsonArray entitlements, Set<GrantedAuthority> authorities) {
|
||||
if (entitlements != null) {
|
||||
for (JsonElement obj : entitlements) {
|
||||
Matcher matcher = Pattern.compile(ENTITLEMENT_REGEX).matcher(obj.getAsString());
|
||||
if (matcher.find()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (matcher.group(1) != null && matcher.group(1).length() > 0) {
|
||||
sb.append(matcher.group(1).replace("+-+", "_").replaceAll("[+.]", "_").toUpperCase());
|
||||
}
|
||||
if (matcher.group(2).length() > 0) {
|
||||
sb.append("_");
|
||||
if (matcher.group(2).equals("admins")) {
|
||||
sb.append("MANAGER");
|
||||
} else {
|
||||
sb.append(matcher.group(2).toUpperCase());
|
||||
}
|
||||
}
|
||||
authorities.add(new SimpleGrantedAuthority(sb.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
package eu.dnetlib.repo.manager.service.security;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.context.SecurityContext;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.oauth2.common.exceptions.UnauthorizedClientException;
|
||||
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
|
||||
import org.springframework.session.ExpiringSession;
|
||||
import org.springframework.session.FindByIndexNameSessionRepository;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
@Service
|
||||
public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(AuthoritiesUpdater.class);
|
||||
|
||||
@Autowired
|
||||
FindByIndexNameSessionRepository sessions;
|
||||
|
||||
public void update(String email, Collection<? extends GrantedAuthority> authorities) {
|
||||
if (sessions != null) {
|
||||
Map<String, ExpiringSession> map = sessions.
|
||||
findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, email);
|
||||
if (map != null) {
|
||||
logger.debug(map.values().toArray().length);
|
||||
for (ExpiringSession session : map.values()) {
|
||||
logger.debug(session.getId());
|
||||
if (!session.isExpired()) {
|
||||
SecurityContext securityContext = session.getAttribute(SPRING_SECURITY_CONTEXT_KEY);
|
||||
Authentication authentication = securityContext.getAuthentication();
|
||||
if (authentication instanceof OIDCAuthenticationToken) {
|
||||
OIDCAuthenticationToken authOIDC = (OIDCAuthenticationToken) authentication;
|
||||
logger.debug(authorities);
|
||||
securityContext.setAuthentication(new OIDCAuthenticationToken(authOIDC.getSub(), authOIDC.getIssuer(),
|
||||
authOIDC.getUserInfo(), authorities, authOIDC.getIdToken(),
|
||||
authOIDC.getAccessTokenValue(), authOIDC.getRefreshTokenValue()));
|
||||
logger.debug("Update authorities");
|
||||
session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, securityContext);
|
||||
sessions.save(session);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void update(String email, Update update) {
|
||||
Collection<? extends GrantedAuthority> authorities = update.authorities(SecurityContextHolder.getContext().getAuthentication().getAuthorities());
|
||||
this.update(email, authorities);
|
||||
}
|
||||
|
||||
public void addRole(String email, GrantedAuthority role) {
|
||||
this.update(email, old -> {
|
||||
HashSet<GrantedAuthority> authorities = new HashSet<>(old);
|
||||
authorities.add(role);
|
||||
return authorities;
|
||||
});
|
||||
}
|
||||
|
||||
public void addRole(GrantedAuthority role) {
|
||||
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (auth instanceof OIDCAuthenticationToken) {
|
||||
OIDCAuthenticationToken oidcAuth = (OIDCAuthenticationToken) auth;
|
||||
this.addRole(oidcAuth.getUserInfo().getEmail(), role);
|
||||
} else {
|
||||
throw new UnauthorizedClientException("User auth is not instance of OIDCAuthenticationToken");
|
||||
}
|
||||
}
|
||||
|
||||
public void removeRole(String email, GrantedAuthority role) {
|
||||
this.update(email, old -> {
|
||||
HashSet<GrantedAuthority> authorities = new HashSet<>(old);
|
||||
authorities.remove(role);
|
||||
return authorities;
|
||||
});
|
||||
}
|
||||
|
||||
public void removeRole(GrantedAuthority role) {
|
||||
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (auth instanceof OIDCAuthenticationToken) {
|
||||
OIDCAuthenticationToken oidcAuth = (OIDCAuthenticationToken) auth;
|
||||
this.removeRole(oidcAuth.getUserInfo().getEmail(), role);
|
||||
}
|
||||
}
|
||||
|
||||
public interface Update {
|
||||
Collection<? extends GrantedAuthority> authorities(Collection<? extends GrantedAuthority> old);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
package eu.dnetlib.repo.manager.service.security;
|
||||
|
||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface AuthorizationService {
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
String member(String type, String id); //TODO: use or delete
|
||||
|
||||
/**
|
||||
* @param id Resource Id to check.
|
||||
* @return Checks if a user is a member of a resource.
|
||||
*/
|
||||
boolean isMemberOf(String id);
|
||||
|
||||
|
||||
/**
|
||||
* Returns a list of admins of the resource.
|
||||
*
|
||||
* @param repoId
|
||||
* @return
|
||||
*/
|
||||
List<User> getAdminsOfRepo(String repoId);
|
||||
|
||||
/**
|
||||
* Add a user as admin to a resource.
|
||||
*
|
||||
* @param id Resource id
|
||||
* @param email User email
|
||||
* @return
|
||||
* @throws ResourceNotFoundException
|
||||
*/
|
||||
boolean addAdmin(String id, String email) throws ResourceNotFoundException;
|
||||
|
||||
/**
|
||||
* Remove user from resource admins.
|
||||
*
|
||||
* @param id Resource id
|
||||
* @param email User email
|
||||
* @return
|
||||
* @throws ResourceNotFoundException
|
||||
*/
|
||||
boolean removeAdmin(String id, String email) throws ResourceNotFoundException;
|
||||
|
||||
|
||||
/**
|
||||
* Returns the roles of the authenticated user.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
Collection<String> getUserRoles();
|
||||
|
||||
/**
|
||||
* Returns the roles of the user with the given email.
|
||||
*
|
||||
* @param email
|
||||
* @return
|
||||
*/
|
||||
Collection<String> getUserRoles(String email);
|
||||
|
||||
}
|
|
@ -0,0 +1,149 @@
|
|||
package eu.dnetlib.repo.manager.service.security;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonElement;
|
||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||
import eu.dnetlib.repo.manager.service.aai.registry.AaiRegistryService;
|
||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||
import org.mitre.openid.connect.model.UserInfo;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Service("authorizationService")
|
||||
public class AuthorizationServiceImpl implements AuthorizationService {
|
||||
|
||||
public static final String SUPER_ADMINISTRATOR = "SUPER_ADMINISTRATOR";
|
||||
public static final String CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR = "CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR";
|
||||
public static final String REGISTERED_USER = "REGISTERED_USER";
|
||||
|
||||
private final RoleMappingService roleMappingService;
|
||||
private final AaiRegistryService aaiRegistryService;
|
||||
private final AuthoritiesUpdater authoritiesUpdater;
|
||||
|
||||
@Autowired
|
||||
AuthorizationServiceImpl(RoleMappingService roleMappingService, AaiRegistryService aaiRegistryService,
|
||||
AuthoritiesUpdater authoritiesUpdater) {
|
||||
this.roleMappingService = roleMappingService;
|
||||
this.aaiRegistryService = aaiRegistryService;
|
||||
this.authoritiesUpdater = authoritiesUpdater;
|
||||
}
|
||||
|
||||
private String mapType(String type) {
|
||||
if (type.equals("datasource")) {
|
||||
type = "datasource";
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Type = DATASOURCE
|
||||
*/
|
||||
@Override
|
||||
public String member(String type, String id) {
|
||||
return mapType(type).toUpperCase() + "_" + id.toUpperCase();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMemberOf(String repoId) {
|
||||
String repoRole = roleMappingService.convertRepoIdToEncodedAuthorityId(repoId);
|
||||
return SecurityContextHolder.getContext().getAuthentication().getAuthorities()
|
||||
.parallelStream().anyMatch(authority -> authority.toString().equals(repoRole));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<User> getAdminsOfRepo(String repoId) {
|
||||
List<String> userList = new ArrayList<>();
|
||||
|
||||
// find couId by role name
|
||||
String role = roleMappingService.getRoleIdByRepoId(repoId);
|
||||
Integer couId = aaiRegistryService.getCouId(role);
|
||||
if (couId != null) {
|
||||
JsonArray users = aaiRegistryService.getUsersByCouId(couId);
|
||||
for (JsonElement jsonElement : users) {
|
||||
userList.add(jsonElement.toString());
|
||||
}
|
||||
}
|
||||
return aaiRegistryService.getUsers(couId);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean addAdmin(String id, String email) throws ResourceNotFoundException {
|
||||
Integer coPersonId = aaiRegistryService.getCoPersonIdByEmail(email);
|
||||
if (coPersonId != null) {
|
||||
String role = roleMappingService.getRoleIdByRepoId(id);
|
||||
Integer couId = aaiRegistryService.getCouId(role);
|
||||
if (couId != null) {
|
||||
Integer roleId = aaiRegistryService.getRoleId(coPersonId, couId);
|
||||
aaiRegistryService.assignMemberRole(coPersonId, couId, roleId);
|
||||
|
||||
// Add role to user current authorities
|
||||
authoritiesUpdater.addRole(email, roleMappingService.convertRepoIdToAuthority(id));
|
||||
|
||||
return true;
|
||||
} else {
|
||||
throw new ResourceNotFoundException("Cannot find CouId for role: " + role);
|
||||
}
|
||||
} else {
|
||||
throw new ResourceNotFoundException("Cannot find coPersonId for user with email: " + email);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAdmin(String id, String email) throws ResourceNotFoundException {
|
||||
Integer coPersonId = aaiRegistryService.getCoPersonIdByEmail(email);
|
||||
if (coPersonId != null) {
|
||||
String role = roleMappingService.getRoleIdByRepoId(id);
|
||||
Integer couId = aaiRegistryService.getCouId(role);
|
||||
Integer roleId = null;
|
||||
if (couId != null) {
|
||||
roleId = aaiRegistryService.getRoleId(coPersonId, couId);
|
||||
}
|
||||
if (couId != null && roleId != null) {
|
||||
aaiRegistryService.removeMemberRole(coPersonId, couId, roleId);
|
||||
|
||||
// Remove role from user current authorities
|
||||
authoritiesUpdater.removeRole(email, roleMappingService.convertRepoIdToAuthority(id));
|
||||
|
||||
return true;
|
||||
} else {
|
||||
throw new ResourceNotFoundException("Cannot find CouId for role: " + role);
|
||||
}
|
||||
} else {
|
||||
throw new ResourceNotFoundException("Cannot find coPersonId for user with email: " + email);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getUserRoles() {
|
||||
List<String> roles;
|
||||
JsonArray entitlements;
|
||||
UserInfo userInfo = ((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo();
|
||||
if (userInfo.getSource().getAsJsonArray("edu_person_entitlements") != null) {
|
||||
entitlements = userInfo.getSource().getAsJsonArray("edu_person_entitlements");
|
||||
} else if (userInfo.getSource().getAsJsonArray("eduperson_entitlement") != null) {
|
||||
entitlements = userInfo.getSource().getAsJsonArray("eduperson_entitlement");
|
||||
} else {
|
||||
entitlements = new JsonArray();
|
||||
}
|
||||
roles = AuthoritiesMapper.entitlementRoles(entitlements);
|
||||
return roles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getUserRoles(String email) {
|
||||
int coPersonId = aaiRegistryService.getCoPersonIdByEmail(email);
|
||||
List<Integer> list = new ArrayList<>();
|
||||
for (JsonElement element : aaiRegistryService.getRolesWithStatus(coPersonId, AaiRegistryService.RoleStatus.ACTIVE)) {
|
||||
list.add(element.getAsJsonObject().get("CouId").getAsInt());
|
||||
}
|
||||
return aaiRegistryService.getCouNames(list).values();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
package eu.dnetlib.repo.manager.service.security;
|
||||
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface RoleMappingService {
|
||||
|
||||
/**
|
||||
* @param fullName
|
||||
* @param prefix
|
||||
* @return
|
||||
*/
|
||||
String getRepoNameWithoutType(String fullName, String prefix);
|
||||
|
||||
/**
|
||||
* @param roleId Role Id
|
||||
* @return Converts {@param roleId} to a repo Id.
|
||||
*/
|
||||
String getRepoIdByRoleId(String roleId);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param roleIds Collection of roles
|
||||
* @return Converts {@param roleIds} to a repo Ids.
|
||||
*/
|
||||
Collection<String> getRepoIdsByRoleIds(Collection<String> roleIds);
|
||||
|
||||
/**
|
||||
* @param repoId Repository Id
|
||||
* @return Converts {@param repoId} to a role Id.
|
||||
*/
|
||||
String getRoleIdByRepoId(String repoId);
|
||||
|
||||
/**
|
||||
* @param repoIds Collection of Repository Ids
|
||||
* @return Converts {@param repoIds} to role Ids.
|
||||
*/
|
||||
Collection<String> getRoleIdsByRepoIds(Collection<String> repoIds);
|
||||
|
||||
/**
|
||||
* @param authorityId Authority Id
|
||||
* @return Converts {@param authorityId} to repo Id.
|
||||
*/
|
||||
String convertAuthorityIdToRepoId(String authorityId);
|
||||
|
||||
/**
|
||||
* @param authority Granted authority
|
||||
* @return Converts {@param authority} to repo Id.
|
||||
*/
|
||||
String convertAuthorityToRepoId(GrantedAuthority authority);
|
||||
|
||||
/**
|
||||
* @param repoId Repository Id
|
||||
* @return
|
||||
*/
|
||||
String convertRepoIdToAuthorityId(String repoId);
|
||||
|
||||
/**
|
||||
* @param repoId Repository Id
|
||||
* @return Converts {@param repoId} to {@link String} role id url encoded ($ -> %24)
|
||||
* // TODO: remove role encoding and perform url decoding when mapping authorities. (Must be performed in all OpenAIRE projects because of Redis)
|
||||
*/
|
||||
String convertRepoIdToEncodedAuthorityId(String repoId);
|
||||
|
||||
/**
|
||||
* @param repoId Repository Id
|
||||
* @return Converts {@param repoId} to {@link SimpleGrantedAuthority} with the role url encoded ($ -> %24)
|
||||
* // TODO: remove role encoding and perform url decoding when mapping authorities. (Must be performed in all OpenAIRE projects because of Redis)
|
||||
*/
|
||||
SimpleGrantedAuthority convertRepoIdToAuthority(String repoId);
|
||||
|
||||
}
|
|
@ -12,6 +12,7 @@ import org.apache.log4j.Logger;
|
|||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
|
@ -21,6 +22,7 @@ import java.text.ParseException;
|
|||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
|
||||
@Component
|
||||
public class Converter {
|
||||
|
||||
private static final Logger LOGGER = Logger.getLogger(Converter.class);
|
||||
|
@ -37,51 +39,51 @@ public class Converter {
|
|||
repository.setId(datasource.get("id").toString());
|
||||
repository.setOfficialName(datasource.get("officialname").toString());
|
||||
|
||||
repository.setEnglishName( datasource.get("englishname").toString());
|
||||
if(repository.getEnglishName().equals("null"))
|
||||
repository.setEnglishName(datasource.get("englishname").toString());
|
||||
if (repository.getEnglishName().equals("null"))
|
||||
repository.setEnglishName("");
|
||||
|
||||
repository.setWebsiteUrl(datasource.get("websiteurl").toString());
|
||||
if(repository.getWebsiteUrl().equals("null"))
|
||||
if (repository.getWebsiteUrl().equals("null"))
|
||||
repository.setWebsiteUrl("");
|
||||
|
||||
repository.setLogoUrl(datasource.get("logourl").toString());
|
||||
if(repository.getLogoUrl().equals("null"))
|
||||
if (repository.getLogoUrl().equals("null"))
|
||||
repository.setLogoUrl("");
|
||||
|
||||
repository.setContactEmail(datasource.get("contactemail").toString());
|
||||
if(repository.getContactEmail().equals("null"))
|
||||
if (repository.getContactEmail().equals("null"))
|
||||
repository.setContactEmail("");
|
||||
|
||||
|
||||
repository.setLatitude( toDouble(datasource.get("latitude").toString()));
|
||||
repository.setLatitude(toDouble(datasource.get("latitude").toString()));
|
||||
repository.setLongitude(toDouble(datasource.get("longitude").toString()));
|
||||
Double timezone = toDouble(datasource.get("timezone").toString());
|
||||
repository.setTimezone(timezone!=null?timezone:0.0);
|
||||
repository.setTimezone(timezone != null ? timezone : 0.0);
|
||||
repository.setNamespacePrefix(datasource.get("namespaceprefix").toString());
|
||||
repository.setOdLanguages(datasource.get("languages").toString());
|
||||
repository.setDateOfValidation(convertStringToDate( datasource.get("dateofvalidation").toString()));
|
||||
repository.setDateOfValidation(convertStringToDate(datasource.get("dateofvalidation").toString()));
|
||||
|
||||
/* typology -> platform
|
||||
* datasource class -> typology */
|
||||
repository.setTypology(datasource.get("platform").toString());
|
||||
if(repository.getTypology().equals("null"))
|
||||
if (repository.getTypology().equals("null"))
|
||||
repository.setTypology("");
|
||||
repository.setDatasourceClass(datasource.get("typology").toString());
|
||||
|
||||
repository.setDateOfCollection(convertStringToDate( datasource.get("dateofcollection").toString()));
|
||||
repository.setDateOfCollection(convertStringToDate(datasource.get("dateofcollection").toString()));
|
||||
repository.setActivationId(datasource.get("activationId").toString());
|
||||
|
||||
repository.setDescription(datasource.get("description").toString());
|
||||
if(repository.getDescription().equals("null"))
|
||||
if (repository.getDescription().equals("null"))
|
||||
repository.setDescription("");
|
||||
|
||||
repository.setIssn(datasource.get("issn").toString());
|
||||
repository.setLissn(datasource.get("lissn").toString());
|
||||
if(repository.getLissn().equals("null"))
|
||||
if (repository.getLissn().equals("null"))
|
||||
repository.setLissn("");
|
||||
repository.setEissn(datasource.get("eissn").toString());
|
||||
if(repository.getEissn().equals("null"))
|
||||
if (repository.getEissn().equals("null"))
|
||||
repository.setEissn("");
|
||||
repository.setRegisteredBy(datasource.get("registeredby").toString());
|
||||
|
||||
|
@ -94,8 +96,8 @@ public class Converter {
|
|||
repository.setCollectedFrom(datasource.get("collectedfrom").toString());
|
||||
|
||||
//TODO change organization to list
|
||||
JSONArray organizations = ((JSONArray)datasource.get("organizations"));
|
||||
if(organizations.length() != 0) {
|
||||
JSONArray organizations = ((JSONArray) datasource.get("organizations"));
|
||||
if (organizations.length() != 0) {
|
||||
repository.setOrganization(((JSONArray) datasource.get("organizations")).getJSONObject(0).get("legalname").toString());
|
||||
String countryCode = ((JSONArray) datasource.get("organizations")).getJSONObject(0).get("country").toString();
|
||||
repository.setCountryCode(countryCode);
|
||||
|
@ -106,31 +108,31 @@ public class Converter {
|
|||
return repository;
|
||||
}
|
||||
|
||||
public static Date convertStringToDate(String date){
|
||||
public static Date convertStringToDate(String date) {
|
||||
|
||||
if(Objects.equals(date, "null"))
|
||||
if (Objects.equals(date, "null"))
|
||||
return null;
|
||||
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
||||
try {
|
||||
return formatter.parse(date);
|
||||
} catch (ParseException e) {
|
||||
LOGGER.error(e);
|
||||
LOGGER.error(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String convertDateToString(Date date){
|
||||
public static String convertDateToString(Date date) {
|
||||
|
||||
if(Objects.equals(date, null))
|
||||
if (Objects.equals(date, null))
|
||||
return null;
|
||||
|
||||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
|
||||
return formatter.format(date);
|
||||
}
|
||||
|
||||
public static Double toDouble(String number){
|
||||
if(Objects.equals(number, "null"))
|
||||
public static Double toDouble(String number) {
|
||||
if (Objects.equals(number, "null"))
|
||||
return 0.0;
|
||||
else
|
||||
return Double.valueOf(number);
|
||||
|
@ -140,12 +142,12 @@ public class Converter {
|
|||
|
||||
List<RepositorySnippet> resultSet = new ArrayList<>();
|
||||
JSONArray rs = json.getJSONArray("datasourceInfo");
|
||||
for(int i=0;i<rs.length();i++)
|
||||
resultSet.add(jsonToRepositorySnippetObject( rs.getJSONObject(i)) );
|
||||
for (int i = 0; i < rs.length(); i++)
|
||||
resultSet.add(jsonToRepositorySnippetObject(rs.getJSONObject(i)));
|
||||
return resultSet;
|
||||
}
|
||||
|
||||
private static RepositorySnippet jsonToRepositorySnippetObject(JSONObject repositorySnippetObject) throws JSONException {
|
||||
public static RepositorySnippet jsonToRepositorySnippetObject(JSONObject repositorySnippetObject) throws JSONException {
|
||||
|
||||
|
||||
RepositorySnippet repositorySnippet = new RepositorySnippet();
|
||||
|
@ -156,16 +158,16 @@ public class Converter {
|
|||
repositorySnippet.setId(repositorySnippetObject.get("id").toString());
|
||||
repositorySnippet.setOfficialname(repositorySnippetObject.get("officialname").toString());
|
||||
|
||||
repositorySnippet.setEnglishname( repositorySnippetObject.get("englishname").toString());
|
||||
if(repositorySnippet.getEnglishname().equals("null"))
|
||||
repositorySnippet.setEnglishname(repositorySnippetObject.get("englishname").toString());
|
||||
if (repositorySnippet.getEnglishname().equals("null"))
|
||||
repositorySnippet.setEnglishname("");
|
||||
|
||||
repositorySnippet.setWebsiteurl(repositorySnippetObject.get("websiteurl").toString());
|
||||
if(repositorySnippet.getWebsiteurl().equals("null"))
|
||||
if (repositorySnippet.getWebsiteurl().equals("null"))
|
||||
repositorySnippet.setWebsiteurl("");
|
||||
|
||||
repositorySnippet.setRegisteredby(repositorySnippetObject.get("registeredby").toString());
|
||||
if(repositorySnippet.getRegisteredby().equals("null"))
|
||||
if (repositorySnippet.getRegisteredby().equals("null"))
|
||||
repositorySnippet.setRegisteredby("");
|
||||
return repositorySnippet;
|
||||
|
||||
|
@ -175,8 +177,8 @@ public class Converter {
|
|||
|
||||
List<Repository> resultSet = new ArrayList<>();
|
||||
JSONArray rs = json.getJSONArray("datasourceInfo");
|
||||
for(int i=0;i<rs.length();i++)
|
||||
resultSet.add(jsonToRepositoryObject( rs.getJSONObject(i)) );
|
||||
for (int i = 0; i < rs.length(); i++)
|
||||
resultSet.add(jsonToRepositoryObject(rs.getJSONObject(i)));
|
||||
return resultSet;
|
||||
}
|
||||
|
||||
|
@ -184,8 +186,8 @@ public class Converter {
|
|||
|
||||
List<RepositoryInterface> resultSet = new ArrayList<>();
|
||||
JSONArray rs = json.getJSONArray("api");
|
||||
for(int i=0;i<rs.length();i++)
|
||||
resultSet.add(jsonToRepositoryInterfaceObject( rs.getJSONObject(i)) );
|
||||
for (int i = 0; i < rs.length(); i++)
|
||||
resultSet.add(jsonToRepositoryInterfaceObject(rs.getJSONObject(i)));
|
||||
return resultSet;
|
||||
}
|
||||
|
||||
|
@ -204,7 +206,7 @@ public class Converter {
|
|||
repositoryInterface.setRemovable(Boolean.parseBoolean(repositoryInterfaceObject.get("removable").toString()));
|
||||
|
||||
|
||||
// repositoryInterface.setMetadataIdentifierPath(repositoryInterfaceObject.get("metadataIdentifierPath").toString());
|
||||
// repositoryInterface.setMetadataIdentifierPath(repositoryInterfaceObject.get("metadataIdentifierPath").toString());
|
||||
repositoryInterface.setDesiredCompatibilityLevel(repositoryInterfaceObject.get("compatibility").toString());
|
||||
//repositoryInterface.setActive(Boolean.parseBoolean(repositoryInterfaceObject.get("active").toString()));
|
||||
|
||||
|
@ -215,8 +217,8 @@ public class Converter {
|
|||
ObjectMapper mapper = new ObjectMapper();
|
||||
JSONArray apiparams = repositoryInterfaceObject.getJSONArray("apiParams");
|
||||
|
||||
for(int i=0;i<apiparams.length();i++)
|
||||
accessParams.put(apiparams.getJSONObject(i).getString("param"),apiparams.getJSONObject(i).getString("value"));
|
||||
for (int i = 0; i < apiparams.length(); i++)
|
||||
accessParams.put(apiparams.getJSONObject(i).getString("param"), apiparams.getJSONObject(i).getString("value"));
|
||||
|
||||
repositoryInterface.setAccessParams(accessParams);
|
||||
|
||||
|
@ -225,58 +227,58 @@ public class Converter {
|
|||
|
||||
public static String repositoryObjectToJson(Repository repository) throws JSONException, JsonProcessingException {
|
||||
|
||||
HashMap<String,Object> repositoryMap = new HashMap<>();
|
||||
HashMap<String, Object> repositoryMap = new HashMap<>();
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
repositoryMap.put("id",repository.getId());
|
||||
repositoryMap.put("openaireId",getOpenaireId(repository.getId()));
|
||||
repositoryMap.put("officialname",repository.getOfficialName());
|
||||
repositoryMap.put("englishname",repository.getEnglishName());
|
||||
repositoryMap.put("websiteurl",repository.getWebsiteUrl());
|
||||
repositoryMap.put("logourl",repository.getLogoUrl());
|
||||
repositoryMap.put("contactemail",repository.getContactEmail());
|
||||
repositoryMap.put("longitude",repository.getLongitude().toString());
|
||||
repositoryMap.put("latitude",repository.getLatitude().toString());
|
||||
repositoryMap.put("timezone",repository.getTimezone());
|
||||
repositoryMap.put("id", repository.getId());
|
||||
repositoryMap.put("openaireId", getOpenaireId(repository.getId()));
|
||||
repositoryMap.put("officialname", repository.getOfficialName());
|
||||
repositoryMap.put("englishname", repository.getEnglishName());
|
||||
repositoryMap.put("websiteurl", repository.getWebsiteUrl());
|
||||
repositoryMap.put("logourl", repository.getLogoUrl());
|
||||
repositoryMap.put("contactemail", repository.getContactEmail());
|
||||
repositoryMap.put("longitude", repository.getLongitude().toString());
|
||||
repositoryMap.put("latitude", repository.getLatitude().toString());
|
||||
repositoryMap.put("timezone", repository.getTimezone());
|
||||
|
||||
repositoryMap.put("namespaceprefix",repository.getNamespacePrefix()!=null?repository.getNamespacePrefix():"");
|
||||
repositoryMap.put("languages",repository.getOdLanguages()!=null?repository.getOdLanguages():"");
|
||||
repositoryMap.put("namespaceprefix", repository.getNamespacePrefix() != null ? repository.getNamespacePrefix() : "");
|
||||
repositoryMap.put("languages", repository.getOdLanguages() != null ? repository.getOdLanguages() : "");
|
||||
|
||||
repositoryMap.put("dateofcollection",repository.getDateOfCollection()!=null?convertDateToString(repository.getDateOfCollection()):"");
|
||||
repositoryMap.put("dateofcollection", repository.getDateOfCollection() != null ? convertDateToString(repository.getDateOfCollection()) : "");
|
||||
|
||||
/*
|
||||
* typology -> platform
|
||||
* datasource class -> typology
|
||||
* */
|
||||
repositoryMap.put("typology",repository.getDatasourceClass());
|
||||
repositoryMap.put("platform",repository.getTypology());
|
||||
* typology -> platform
|
||||
* datasource class -> typology
|
||||
* */
|
||||
repositoryMap.put("typology", repository.getDatasourceClass());
|
||||
repositoryMap.put("platform", repository.getTypology());
|
||||
|
||||
repositoryMap.put("dateofvalidation",repository.getDateOfCollection()!=null?convertDateToString(repository.getDateOfCollection()):"");
|
||||
repositoryMap.put("activationId",repository.getActivationId()!=null?repository.getActivationId():"");
|
||||
repositoryMap.put("dateofvalidation", repository.getDateOfCollection() != null ? convertDateToString(repository.getDateOfCollection()) : "");
|
||||
repositoryMap.put("activationId", repository.getActivationId() != null ? repository.getActivationId() : "");
|
||||
|
||||
repositoryMap.put("description",repository.getDescription());
|
||||
repositoryMap.put("description", repository.getDescription());
|
||||
|
||||
repositoryMap.put("eissn",repository.getEissn()!=null?repository.getEissn():"");
|
||||
repositoryMap.put("issn",repository.getIssn()!=null?repository.getIssn():"");
|
||||
repositoryMap.put("lissn",repository.getLissn()!=null?repository.getLissn():"");
|
||||
repositoryMap.put("eissn", repository.getEissn() != null ? repository.getEissn() : "");
|
||||
repositoryMap.put("issn", repository.getIssn() != null ? repository.getIssn() : "");
|
||||
repositoryMap.put("lissn", repository.getLissn() != null ? repository.getLissn() : "");
|
||||
|
||||
repositoryMap.put("registeredby",repository.getRegisteredBy());
|
||||
repositoryMap.put("registeredby", repository.getRegisteredBy());
|
||||
|
||||
repositoryMap.put("aggregator",repository.getAggregator()!=null?repository.getAggregator():"");
|
||||
repositoryMap.put("collectedfrom",repository.getCollectedFrom()!=null?repository.getCollectedFrom():"");
|
||||
repositoryMap.put("aggregator", repository.getAggregator() != null ? repository.getAggregator() : "");
|
||||
repositoryMap.put("collectedfrom", repository.getCollectedFrom() != null ? repository.getCollectedFrom() : "");
|
||||
|
||||
repositoryMap.put("managed",repository.isRegistered());
|
||||
repositoryMap.put("managed", repository.isRegistered());
|
||||
|
||||
Map<String,String> organization = new HashMap<>();
|
||||
organization.put("legalname",repository.getOrganization());
|
||||
organization.put("country",repository.getCountryCode());
|
||||
organization.put("legalshortname","");
|
||||
organization.put("websiteurl","");
|
||||
organization.put("logourl","");
|
||||
Map<String, String> organization = new HashMap<>();
|
||||
organization.put("legalname", repository.getOrganization());
|
||||
organization.put("country", repository.getCountryCode());
|
||||
organization.put("legalshortname", "");
|
||||
organization.put("websiteurl", "");
|
||||
organization.put("logourl", "");
|
||||
|
||||
List organizations = new ArrayList();
|
||||
organizations.add(organization);
|
||||
repositoryMap.put("organizations",organizations);
|
||||
repositoryMap.put("organizations", organizations);
|
||||
|
||||
//TODO check identitites
|
||||
//Map<String,String> identity = new HashMap<>();
|
||||
|
@ -293,43 +295,43 @@ public class Converter {
|
|||
repositoryMap.put("identities", identities);
|
||||
}
|
||||
|
||||
repositoryMap.put("subjects","");
|
||||
repositoryMap.put("subjects", "");
|
||||
|
||||
return mapper.writeValueAsString(repositoryMap);
|
||||
}
|
||||
|
||||
public static String repositoryInterfaceObjectToJson(Repository repository,RepositoryInterface repositoryInterface) throws JSONException {
|
||||
public static String repositoryInterfaceObjectToJson(Repository repository, RepositoryInterface repositoryInterface) throws JSONException {
|
||||
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
|
||||
jsonObject.put("id",repositoryInterface.getId());
|
||||
jsonObject.put("protocol",repositoryInterface.getAccessProtocol());
|
||||
jsonObject.put("datasource",repository.getId());
|
||||
jsonObject.put("contentdescription",repositoryInterface.getContentDescription());
|
||||
jsonObject.put("typology",repositoryInterface.getTypology());
|
||||
jsonObject.put("compatibility",repositoryInterface.getDesiredCompatibilityLevel());
|
||||
jsonObject.put("compatibilityOverride",repositoryInterface.getDesiredCompatibilityLevel());
|
||||
jsonObject.put("id", repositoryInterface.getId());
|
||||
jsonObject.put("protocol", repositoryInterface.getAccessProtocol());
|
||||
jsonObject.put("datasource", repository.getId());
|
||||
jsonObject.put("contentdescription", repositoryInterface.getContentDescription());
|
||||
jsonObject.put("typology", repositoryInterface.getTypology());
|
||||
jsonObject.put("compatibility", repositoryInterface.getDesiredCompatibilityLevel());
|
||||
jsonObject.put("compatibilityOverride", repositoryInterface.getDesiredCompatibilityLevel());
|
||||
|
||||
jsonObject.put("lastCollectionTotal","");
|
||||
jsonObject.put("lastCollectionTotal", "");
|
||||
|
||||
jsonObject.put("lastCollectionDate",repositoryInterface.getLastCollectionDate());
|
||||
jsonObject.put("lastAggregationTotal","");
|
||||
jsonObject.put("lastAggregationDate","");
|
||||
jsonObject.put("lastDownloadTotal","");
|
||||
jsonObject.put("lastDownloadDate","");
|
||||
jsonObject.put("lastCollectionDate", repositoryInterface.getLastCollectionDate());
|
||||
jsonObject.put("lastAggregationTotal", "");
|
||||
jsonObject.put("lastAggregationDate", "");
|
||||
jsonObject.put("lastDownloadTotal", "");
|
||||
jsonObject.put("lastDownloadDate", "");
|
||||
|
||||
jsonObject.put("baseurl",repositoryInterface.getBaseUrl());
|
||||
jsonObject.put("removable",repositoryInterface.isRemovable());
|
||||
jsonObject.put("baseurl", repositoryInterface.getBaseUrl());
|
||||
jsonObject.put("removable", repositoryInterface.isRemovable());
|
||||
|
||||
|
||||
JSONArray apiparams = new JSONArray();
|
||||
for(String param: repositoryInterface.getAccessParams().keySet()){
|
||||
for (String param : repositoryInterface.getAccessParams().keySet()) {
|
||||
JSONObject jo = new JSONObject();
|
||||
jo.put("param",param);
|
||||
jo.put("value",repositoryInterface.getAccessParams().get(param));
|
||||
jo.put("param", param);
|
||||
jo.put("value", repositoryInterface.getAccessParams().get(param));
|
||||
apiparams.put(jo);
|
||||
}
|
||||
jsonObject.put("apiParams",apiparams);
|
||||
jsonObject.put("apiParams", apiparams);
|
||||
|
||||
|
||||
// jsonObject.put("metadataIdentifierPath",repositoryInterface.getMetadataIdentifierPath());
|
||||
|
@ -345,7 +347,7 @@ public class Converter {
|
|||
//InputStream in = Converter.class.getResourceAsStream("resources/eu/dnetlib/repo/manager/service/utils/"+filename);
|
||||
InputStream in = Converter.class.getClass().getResourceAsStream("/eu/**/" + filename);
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(in));
|
||||
while((line = br.readLine()) != null) {
|
||||
while ((line = br.readLine()) != null) {
|
||||
list.add(line.trim());
|
||||
}
|
||||
br.close();
|
||||
|
@ -375,9 +377,9 @@ public class Converter {
|
|||
AggregationDetails aggregationDetails = new AggregationDetails();
|
||||
|
||||
aggregationDetails.setAggregationStage(aggregationObject.get("aggregationStage").toString());
|
||||
if(aggregationObject.has("collectionMode"))
|
||||
if (aggregationObject.has("collectionMode"))
|
||||
aggregationDetails.setCollectionMode(aggregationObject.get("collectionMode").toString());
|
||||
if(aggregationObject.has("indexedVersion"))
|
||||
if (aggregationObject.has("indexedVersion"))
|
||||
aggregationDetails.setIndexedVersion(Boolean.parseBoolean(aggregationObject.get("indexedVersion").toString()));
|
||||
aggregationDetails.setDate(convertStringToDate(aggregationObject.get("date").toString()));
|
||||
aggregationDetails.setNumberOfRecords(Integer.parseInt(aggregationObject.get("numberOfRecords").toString()));
|
||||
|
@ -388,9 +390,9 @@ public class Converter {
|
|||
public static List<Timezone> toTimezones(List<String> timezones) {
|
||||
|
||||
List<Timezone> tmz = new ArrayList<>();
|
||||
for(String t : timezones){
|
||||
for (String t : timezones) {
|
||||
String[] s = t.split("\t");
|
||||
tmz.add(new Timezone(s[1],Double.parseDouble(s[0])));
|
||||
tmz.add(new Timezone(s[1], Double.parseDouble(s[0])));
|
||||
}
|
||||
return tmz;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
package eu.dnetlib.repo.manager.utils;
|
||||
|
||||
public class DatasourceManagerClient {
|
||||
//
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package eu.dnetlib.repo.manager.utils;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class HttpUtils {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(HttpUtils.class);
|
||||
|
||||
@Value("${aai.registry.url}")
|
||||
private String registryUrl;
|
||||
|
||||
@Value("${aai.registry.authentication.username}")
|
||||
private String user;
|
||||
|
||||
@Value("${aai.registry.authentication.password}")
|
||||
private String password;
|
||||
|
||||
public JsonElement post(String path, JsonObject body) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
HttpHeaders headers = createHeaders(user, password);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
HttpEntity<String> request = new HttpEntity<>(body.toString(), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.POST, request, String.class);
|
||||
return getResponseEntityAsJsonElement(responseEntity);
|
||||
}
|
||||
|
||||
public JsonElement put(String path, JsonObject body) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
HttpHeaders headers = createHeaders(user, password);
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
HttpEntity<String> request = new HttpEntity<>(body.toString(), headers);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange(registryUrl + path, HttpMethod.PUT, request, String.class);
|
||||
return getResponseEntityAsJsonElement(responseEntity);
|
||||
}
|
||||
|
||||
public JsonElement get(String path, Map<String, String> params) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
String url = registryUrl + path + ((params != null) ? createParams(params) : null);
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange
|
||||
(url, HttpMethod.GET, new HttpEntity<>(createHeaders(user, password)), String.class);
|
||||
return getResponseEntityAsJsonElement(responseEntity);
|
||||
}
|
||||
|
||||
public JsonElement delete(String path) {
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
String url = registryUrl + path;
|
||||
ResponseEntity<String> responseEntity = restTemplate.exchange
|
||||
(url, HttpMethod.DELETE, new HttpEntity<>(createHeaders(user, password)), String.class);
|
||||
return getResponseEntityAsJsonElement(responseEntity);
|
||||
}
|
||||
|
||||
|
||||
private String createParams(Map<String, String> params) {
|
||||
StringBuilder ret = new StringBuilder("?");
|
||||
int count = 0;
|
||||
for (Map.Entry<String, String> param : params.entrySet()) {
|
||||
ret.append(param.getKey()).append("=").append(param.getValue());
|
||||
count++;
|
||||
if (count != params.entrySet().size()) {
|
||||
ret.append("&");
|
||||
}
|
||||
}
|
||||
return ret.toString();
|
||||
}
|
||||
|
||||
private HttpHeaders createHeaders(String username, String password) {
|
||||
return new HttpHeaders() {{
|
||||
String auth = username + ":" + password;
|
||||
byte[] encodedAuth = Base64.encodeBase64(
|
||||
auth.getBytes(Charset.forName("US-ASCII")));
|
||||
String authHeader = "Basic " + new String(encodedAuth);
|
||||
set("Authorization", authHeader);
|
||||
}};
|
||||
}
|
||||
|
||||
private JsonElement getResponseEntityAsJsonElement(ResponseEntity<String> responseEntity) {
|
||||
if (responseEntity != null && responseEntity.getBody() != null) {
|
||||
logger.info(responseEntity.getBody());
|
||||
try {
|
||||
return new JsonParser().parse(responseEntity.getBody());
|
||||
} catch (Exception e) {
|
||||
logger.warn("Could not parse response body", e);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
package eu.dnetlib.repo.manager.utils;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonObject;
|
||||
|
||||
public class JsonUtils {
|
||||
|
||||
private JsonUtils() {
|
||||
}
|
||||
|
||||
public JsonObject createResponse(JsonElement response) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.add("response", response);
|
||||
return json;
|
||||
}
|
||||
|
||||
public static JsonObject createResponse(String response) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("response", response);
|
||||
return json;
|
||||
}
|
||||
|
||||
public JsonObject createResponse(Number response) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("response", response);
|
||||
return json;
|
||||
}
|
||||
|
||||
public static JsonObject createResponse(Boolean response) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("response", response);
|
||||
return json;
|
||||
}
|
||||
|
||||
public static JsonObject createResponse(Character response) {
|
||||
JsonObject json = new JsonObject();
|
||||
json.addProperty("response", response);
|
||||
return json;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue