2024-02-13 08:53:33 +01:00
|
|
|
package eu.eudat.controllers;
|
2023-12-13 10:42:59 +01:00
|
|
|
|
|
|
|
import eu.eudat.audit.AuditableAction;
|
2024-01-17 10:20:02 +01:00
|
|
|
import gr.cite.tools.validation.ValidationFilterAnnotation;
|
2023-12-13 10:42:59 +01:00
|
|
|
import eu.eudat.model.EntityDoi;
|
|
|
|
import eu.eudat.model.censorship.EntityDoiCensor;
|
|
|
|
import eu.eudat.model.censorship.deposit.DepositConfigurationCensor;
|
|
|
|
import eu.eudat.model.deposit.DepositConfiguration;
|
|
|
|
import eu.eudat.model.persist.deposit.DepositAuthenticateRequest;
|
|
|
|
import eu.eudat.model.persist.deposit.DepositRequest;
|
|
|
|
import eu.eudat.service.deposit.DepositService;
|
|
|
|
import gr.cite.tools.auditing.AuditService;
|
|
|
|
import gr.cite.tools.data.censor.CensorFactory;
|
|
|
|
import gr.cite.tools.fieldset.FieldSet;
|
|
|
|
import gr.cite.tools.logging.LoggerService;
|
|
|
|
import gr.cite.tools.logging.MapLogEntry;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
|
import java.util.AbstractMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
@RestController
|
|
|
|
@CrossOrigin
|
|
|
|
@RequestMapping(value = {"/api/deposit/"})
|
2024-02-08 10:04:38 +01:00
|
|
|
public class DepositController {
|
2023-12-13 10:42:59 +01:00
|
|
|
|
2024-01-04 12:31:14 +01:00
|
|
|
private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DepositController.class));
|
2023-12-13 10:42:59 +01:00
|
|
|
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
private final DepositService depositService;
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
private final CensorFactory censorFactory;
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
private final AuditService auditService;
|
|
|
|
|
|
|
|
@Autowired
|
2024-02-08 10:04:38 +01:00
|
|
|
public DepositController(DepositService depositService, CensorFactory censorFactory, AuditService auditService) {
|
2023-12-13 10:42:59 +01:00
|
|
|
this.depositService = depositService;
|
2024-01-04 12:31:14 +01:00
|
|
|
this.censorFactory = censorFactory;
|
|
|
|
this.auditService = auditService;
|
2023-12-13 10:42:59 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/repositories/available")
|
|
|
|
public List<eu.eudat.model.deposit.DepositConfiguration> getAvailableRepos(FieldSet fieldSet) {
|
|
|
|
logger.debug(new MapLogEntry("retrieving" + DepositConfiguration.class.getSimpleName()).And("fields", fieldSet));
|
|
|
|
|
|
|
|
this.censorFactory.censor(DepositConfigurationCensor.class).censor(fieldSet, null);
|
|
|
|
|
|
|
|
List<DepositConfiguration> model = this.depositService.getAvailableConfigurations(fieldSet);
|
|
|
|
this.auditService.track(AuditableAction.Deposit_GetAvailableRepositories, Map.ofEntries(
|
|
|
|
new AbstractMap.SimpleEntry<String, Object>("fields", fieldSet)
|
|
|
|
));
|
|
|
|
|
|
|
|
return model;
|
|
|
|
}
|
|
|
|
|
|
|
|
@PostMapping("/get-access-token")
|
2024-01-04 12:31:14 +01:00
|
|
|
@ValidationFilterAnnotation(validator = DepositAuthenticateRequest.DepositAuthenticateRequestValidator.ValidatorName, argumentName = "model")
|
|
|
|
public String getAccessToken(@RequestBody DepositAuthenticateRequest model) {
|
2023-12-13 10:42:59 +01:00
|
|
|
logger.debug(new MapLogEntry("get access token" + DepositAuthenticateRequest.class.getSimpleName()).And("model", model));
|
|
|
|
|
|
|
|
String accessToken = this.depositService.authenticate(model);
|
|
|
|
this.auditService.track(AuditableAction.Deposit_GetAccessToken, Map.ofEntries(
|
|
|
|
new AbstractMap.SimpleEntry<String, Object>("model", model)
|
|
|
|
));
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
return accessToken;
|
|
|
|
}
|
|
|
|
|
|
|
|
@PostMapping("/deposit")
|
|
|
|
@Transactional
|
2024-01-04 12:31:14 +01:00
|
|
|
@ValidationFilterAnnotation(validator = DepositRequest.DepositRequestValidator.ValidatorName, argumentName = "model")
|
|
|
|
public EntityDoi deposit(@RequestBody DepositRequest model) throws Exception {
|
2023-12-13 10:42:59 +01:00
|
|
|
logger.debug(new MapLogEntry("persisting" + DepositRequest.class.getSimpleName()).And("model", model).And("fieldSet", model.getProject()));
|
|
|
|
this.censorFactory.censor(EntityDoiCensor.class).censor(model.getProject(), null);
|
|
|
|
|
|
|
|
EntityDoi persisted = this.depositService.deposit(model);
|
|
|
|
this.auditService.track(AuditableAction.Deposit_Deposit, Map.ofEntries(
|
|
|
|
new AbstractMap.SimpleEntry<String, Object>("model", model)
|
|
|
|
));
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
return persisted;
|
|
|
|
}
|
|
|
|
|
|
|
|
@GetMapping("/repositories/{repositoryId}/logo")
|
|
|
|
public String getLogo(@PathVariable("repositoryId") String repositoryId) {
|
|
|
|
logger.debug(new MapLogEntry("get logo" + DepositConfiguration.class.getSimpleName()).And("repositoryId", repositoryId));
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
String logo = this.depositService.getLogo(repositoryId);
|
|
|
|
this.auditService.track(AuditableAction.Deposit_GetLogo, Map.ofEntries(
|
|
|
|
new AbstractMap.SimpleEntry<String, Object>("repositoryId", repositoryId)
|
|
|
|
));
|
2024-01-04 12:31:14 +01:00
|
|
|
|
2023-12-13 10:42:59 +01:00
|
|
|
return logo;
|
|
|
|
}
|
|
|
|
}
|