Partially fix Deposit Logic and add support for upcomming micro-services
This commit is contained in:
parent
5885e3ae5c
commit
dc752f73ca
|
@ -35,6 +35,11 @@
|
||||||
<artifactId>oidc-authz</artifactId>
|
<artifactId>oidc-authz</artifactId>
|
||||||
<version>2.1.0</version>
|
<version>2.1.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>gr.cite.opendmp</groupId>
|
||||||
|
<artifactId>repositorydepositbase</artifactId>
|
||||||
|
<version>1.0.4</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
package eu.eudat.configurations;
|
||||||
|
|
||||||
|
import eu.eudat.depositinterface.repository.RepositoryDeposit;
|
||||||
|
import eu.eudat.repository.DepositRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableConfigurationProperties({DepositProperties.class})
|
||||||
|
public class DepositConfiguration {
|
||||||
|
|
||||||
|
private final DepositProperties properties;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public DepositConfiguration(DepositProperties properties) {
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Qualifier("depositClients")
|
||||||
|
public List<RepositoryDeposit> depositClients() {
|
||||||
|
List<RepositoryDeposit> clients = new ArrayList<>();
|
||||||
|
for (String url: properties.getUrls()) {
|
||||||
|
clients.add(new DepositRepository(WebClient.builder().baseUrl(url + "/api/deposit").build()));
|
||||||
|
}
|
||||||
|
return clients;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package eu.eudat.configurations;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.boot.context.properties.bind.ConstructorBinding;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ConfigurationProperties(prefix = "deposit")
|
||||||
|
public class DepositProperties {
|
||||||
|
|
||||||
|
private List<String> urls;
|
||||||
|
|
||||||
|
@ConstructorBinding
|
||||||
|
public DepositProperties(List<String> urls) {
|
||||||
|
this.urls = urls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getUrls() {
|
||||||
|
return urls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrls(List<String> urls) {
|
||||||
|
this.urls = urls;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package eu.eudat.repository;
|
||||||
|
|
||||||
|
import eu.eudat.depositinterface.models.DMPDepositModel;
|
||||||
|
import eu.eudat.depositinterface.repository.RepositoryDeposit;
|
||||||
|
import eu.eudat.depositinterface.repository.RepositoryDepositConfiguration;
|
||||||
|
import org.springframework.core.ParameterizedTypeReference;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class DepositRepository implements RepositoryDeposit {
|
||||||
|
|
||||||
|
private final WebClient depositClient;
|
||||||
|
|
||||||
|
public DepositRepository(WebClient depositClient) {
|
||||||
|
this.depositClient = depositClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String deposit(String repositoryId, DMPDepositModel dmpDepositModel, String repositoryAccessToken) throws Exception {
|
||||||
|
return depositClient.post().uri("/" + repositoryId, uriBuilder -> uriBuilder.queryParam("authToken", repositoryAccessToken).build()).bodyValue(dmpDepositModel).exchangeToMono(mono -> mono.bodyToMono(String.class)).block();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String authenticate(String repositoryId, String code) {
|
||||||
|
return depositClient.get().uri("/authenticate/" + repositoryId, uriBuilder -> uriBuilder.queryParam("authToken", code).build()).exchangeToMono(mono -> mono.bodyToMono(String.class)).block();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RepositoryDepositConfiguration> getConfiguration() {
|
||||||
|
return depositClient.get().uri("/configuration").exchangeToMono(mono -> mono.bodyToMono(new ParameterizedTypeReference<List<RepositoryDepositConfiguration>>() {})).block();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLogo(String repositoryId) {
|
||||||
|
return depositClient.get().uri("/logo/" + repositoryId).exchangeToMono(mono -> mono.bodyToMono(String.class)).block();
|
||||||
|
}
|
||||||
|
}
|
|
@ -1960,6 +1960,7 @@ public class DataManagementPlanManager {
|
||||||
return fileEnvelope;
|
return fileEnvelope;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public FileEnvelope getRDAJsonDocument(String id, Principal principal) throws Exception {
|
public FileEnvelope getRDAJsonDocument(String id, Principal principal) throws Exception {
|
||||||
DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id));
|
DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id));
|
||||||
if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId()))
|
if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId()))
|
||||||
|
@ -2464,6 +2465,7 @@ public class DataManagementPlanManager {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception {
|
public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception {
|
||||||
DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId()));
|
DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId()));
|
||||||
if (!isUserOwnerOfDmp(dmp, principal))
|
if (!isUserOwnerOfDmp(dmp, principal))
|
||||||
|
|
|
@ -6,10 +6,14 @@ import eu.eudat.models.data.doi.DepositRequest;
|
||||||
import eu.eudat.models.data.doi.Doi;
|
import eu.eudat.models.data.doi.Doi;
|
||||||
import eu.eudat.models.data.doi.RepositoryConfig;
|
import eu.eudat.models.data.doi.RepositoryConfig;
|
||||||
import eu.eudat.models.data.security.Principal;
|
import eu.eudat.models.data.security.Principal;
|
||||||
|
import jakarta.transaction.Transactional;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.core.ParameterizedTypeReference;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -19,18 +23,20 @@ import java.util.Optional;
|
||||||
public class DepositManager {
|
public class DepositManager {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(DepositManager.class);
|
private static final Logger logger = LoggerFactory.getLogger(DepositManager.class);
|
||||||
|
|
||||||
private List<RepositoryDeposit> repositories;
|
//private List<RepositoryDeposit> repositories;
|
||||||
private DataManagementPlanManager dataManagementPlanManager;
|
private DataManagementPlanManager dataManagementPlanManager;
|
||||||
|
private final List<RepositoryDeposit> depositClients;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public DepositManager(List<RepositoryDeposit> repositories, DataManagementPlanManager dataManagementPlanManager){
|
public DepositManager(/*List<RepositoryDeposit> repositories,*/ DataManagementPlanManager dataManagementPlanManager, @Qualifier("depositClients") List<RepositoryDeposit> depositClients){
|
||||||
this.repositories = repositories;
|
//this.repositories = repositories;
|
||||||
this.dataManagementPlanManager = dataManagementPlanManager;
|
this.dataManagementPlanManager = dataManagementPlanManager;
|
||||||
|
this.depositClients = depositClients;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<RepositoryConfig> getAvailableRepos() {
|
public List<RepositoryConfig> getAvailableRepos() {
|
||||||
List<RepositoryConfig> reposConfigModel = new ArrayList<>();
|
List<RepositoryConfig> reposConfigModel = new ArrayList<>();
|
||||||
for (RepositoryDeposit r: this.repositories) {
|
for (RepositoryDeposit r: this.depositClients) {
|
||||||
List<RepositoryDepositConfiguration> repoConf = r.getConfiguration();
|
List<RepositoryDepositConfiguration> repoConf = r.getConfiguration();
|
||||||
if(repoConf != null) {
|
if(repoConf != null) {
|
||||||
for(RepositoryDepositConfiguration cf: repoConf){
|
for(RepositoryDepositConfiguration cf: repoConf){
|
||||||
|
@ -43,7 +49,7 @@ public class DepositManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String authenticate(String id, String code) {
|
public String authenticate(String id, String code) {
|
||||||
for(RepositoryDeposit r: this.repositories){
|
for(RepositoryDeposit r: this.depositClients){
|
||||||
if(r.getConfiguration().stream().anyMatch(x -> x.getRepositoryId().equals(id))){
|
if(r.getConfiguration().stream().anyMatch(x -> x.getRepositoryId().equals(id))){
|
||||||
return r.authenticate(id, code);
|
return r.authenticate(id, code);
|
||||||
}
|
}
|
||||||
|
@ -51,12 +57,13 @@ public class DepositManager {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public Doi deposit(DepositRequest depositRequest, Principal principal) throws Exception {
|
public Doi deposit(DepositRequest depositRequest, Principal principal) throws Exception {
|
||||||
return this.dataManagementPlanManager.createDoi(depositRequest, principal);
|
return this.dataManagementPlanManager.createDoi(depositRequest, principal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getRepositoryLogo(String repositoryId){
|
public String getRepositoryLogo(String repositoryId){
|
||||||
for(RepositoryDeposit r: this.repositories){
|
for(RepositoryDeposit r: this.depositClients){
|
||||||
Optional<RepositoryDepositConfiguration> cf = r.getConfiguration().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst();
|
Optional<RepositoryDepositConfiguration> cf = r.getConfiguration().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst();
|
||||||
if(cf.isPresent()){
|
if(cf.isPresent()){
|
||||||
return cf.get().isHasLogo() ? r.getLogo(repositoryId) : null;
|
return cf.get().isHasLogo() ? r.getLogo(repositoryId) : null;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import eu.eudat.data.old.*;
|
import eu.eudat.data.old.*;
|
||||||
import eu.eudat.depositinterface.models.*;
|
import eu.eudat.depositinterface.models.*;
|
||||||
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
import eu.eudat.logic.utilities.builders.XmlBuilder;
|
||||||
|
import jakarta.transaction.Transactional;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
@ -25,6 +26,7 @@ public class DMPToDepositMapper {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(DMPToDepositMapper.class);
|
private static final Logger logger = LoggerFactory.getLogger(DMPToDepositMapper.class);
|
||||||
private static final ObjectMapper mapper = new ObjectMapper();
|
private static final ObjectMapper mapper = new ObjectMapper();
|
||||||
|
|
||||||
|
@Transactional
|
||||||
public static DMPDepositModel fromDMP(DMP entity, FileEnvelope pdfFile, FileEnvelope jsonFile, File supportingFilesZip, String previousDOI) {
|
public static DMPDepositModel fromDMP(DMP entity, FileEnvelope pdfFile, FileEnvelope jsonFile, File supportingFilesZip, String previousDOI) {
|
||||||
DMPDepositModel deposit = new DMPDepositModel();
|
DMPDepositModel deposit = new DMPDepositModel();
|
||||||
deposit.setId(entity.getId());
|
deposit.setId(entity.getId());
|
||||||
|
@ -49,6 +51,7 @@ public class DMPToDepositMapper {
|
||||||
return deposit;
|
return deposit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
private static DatasetDepositModel fromDataset(Dataset entity){
|
private static DatasetDepositModel fromDataset(Dataset entity){
|
||||||
DatasetDepositModel deposit = new DatasetDepositModel();
|
DatasetDepositModel deposit = new DatasetDepositModel();
|
||||||
deposit.setLabel(entity.getLabel());
|
deposit.setLabel(entity.getLabel());
|
||||||
|
|
|
@ -88,6 +88,7 @@ public class DmpRDAMapper {
|
||||||
rda.getCost().add(CostRDAMapper.toRDA((Map)costl));
|
rda.getCost().add(CostRDAMapper.toRDA((Map)costl));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
UserInfo contactDb = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
|
UserInfo contactDb = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
|
||||||
UserInfo contact = new UserInfo();
|
UserInfo contact = new UserInfo();
|
||||||
contact.setId(contactDb.getId());
|
contact.setId(contactDb.getId());
|
||||||
|
@ -102,6 +103,9 @@ public class DmpRDAMapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rda.setContact(ContactRDAMapper.toRDA(contact));
|
rda.setContact(ContactRDAMapper.toRDA(contact));
|
||||||
|
} catch (NoResultException e) {
|
||||||
|
logger.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*UserInfo creator;
|
/*UserInfo creator;
|
||||||
|
|
|
@ -14,5 +14,6 @@ spring:
|
||||||
optional:classpath:config/elasticsearch.yml[.yml], optional:classpath:config/elasticsearch-${spring.profiles.active}.yml[.yml], optional:file:../config/elasticsearch-${spring.profiles.active}.yml[.yml],
|
optional:classpath:config/elasticsearch.yml[.yml], optional:classpath:config/elasticsearch-${spring.profiles.active}.yml[.yml], optional:file:../config/elasticsearch-${spring.profiles.active}.yml[.yml],
|
||||||
optional:classpath:config/file-path.yml[.yml], optional:classpath:config/file-path-${spring.profiles.active}.yml[.yml], optional:file:../config/file-path-${spring.profiles.active}.yml[.yml],
|
optional:classpath:config/file-path.yml[.yml], optional:classpath:config/file-path-${spring.profiles.active}.yml[.yml], optional:file:../config/file-path-${spring.profiles.active}.yml[.yml],
|
||||||
optional:classpath:config/idpclaims.yml[.yml], optional:classpath:config/idpclaims-${spring.profiles.active}.yml[.yml], optional:file:../config/idpclaims-${spring.profiles.active}.yml[.yml],
|
optional:classpath:config/idpclaims.yml[.yml], optional:classpath:config/idpclaims-${spring.profiles.active}.yml[.yml], optional:file:../config/idpclaims-${spring.profiles.active}.yml[.yml],
|
||||||
optional:classpath:config/external.yml[.yml], optional:classpath:config/external-${spring.profiles.active}.yml[.yml], optional:file:../config/external-${spring.profiles.active}.yml[.yml]
|
optional:classpath:config/external.yml[.yml], optional:classpath:config/external-${spring.profiles.active}.yml[.yml], optional:file:../config/external-${spring.profiles.active}.yml[.yml],
|
||||||
optional:classpath:config/swagger.yml[.yml], optional:classpath:config/swagger-${spring.profiles.active}.yml[.yml], optional:file:../config/swagger-${spring.profiles.active}.yml[.yml]
|
optional:classpath:config/swagger.yml[.yml], optional:classpath:config/swagger-${spring.profiles.active}.yml[.yml], optional:file:../config/swagger-${spring.profiles.active}.yml[.yml],
|
||||||
|
optional:classpath:config/deposit.yml[.yml], optional:classpath:config/deposit-${spring.profiles.active}.yml[.yml], optional:file:../config/deposit-${spring.profiles.active}.yml[.yml]
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
deposit:
|
||||||
|
urls:
|
||||||
|
- http://localhost:8080
|
Loading…
Reference in New Issue