repository terms functionality
This commit is contained in:
parent
2a57236c9a
commit
982d299b2d
|
@ -3,6 +3,7 @@ package eu.dnetlib.repo.manager.controllers;
|
||||||
import eu.dnetlib.domain.data.Repository;
|
import eu.dnetlib.domain.data.Repository;
|
||||||
import eu.dnetlib.domain.data.RepositoryInterface;
|
import eu.dnetlib.domain.data.RepositoryInterface;
|
||||||
import eu.dnetlib.repo.manager.domain.*;
|
import eu.dnetlib.repo.manager.domain.*;
|
||||||
|
import eu.dnetlib.repo.manager.domain.dto.RepositoryTerms;
|
||||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||||
import eu.dnetlib.repo.manager.service.RepositoryService;
|
import eu.dnetlib.repo.manager.service.RepositoryService;
|
||||||
|
@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -64,7 +66,24 @@ public class RepositoryController {
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||||
public List<RepositorySnippet> getRepositoriesSnippetsOfUser() throws Exception {
|
public List<RepositorySnippet> getRepositoriesSnippetsOfUser() throws Exception {
|
||||||
return repositoryService.getRepositoriesSnippetsOfUser("0", "100");
|
return repositoryService.getRepositoriesSnippetsOfUser("0", "100"); // FIXME
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/terms", method = RequestMethod.POST,
|
||||||
|
produces = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAuthority('REGISTERED_USER')")
|
||||||
|
public void updateRepositoriesTerms(@RequestBody List<RepositoryTerms> repositoriesTerms) throws Exception {
|
||||||
|
Date date = new Date();
|
||||||
|
if (repositoriesTerms != null) {
|
||||||
|
for (RepositoryTerms terms : repositoriesTerms) {
|
||||||
|
Repository repository = repositoryService.getRepositoryById(terms.getId());
|
||||||
|
repository.setConsentTermsOfUse(terms.getConsentTermsOfUse());
|
||||||
|
repository.setFullTextDownload(terms.getFullTextDownload());
|
||||||
|
repository.setConsentTermsOfUseDate(date);
|
||||||
|
repositoryService.updateRepository(repository, SecurityContextHolder.getContext().getAuthentication());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "/searchRegisteredRepositories/{page}/{size}", method = RequestMethod.GET,
|
@RequestMapping(value = "/searchRegisteredRepositories/{page}/{size}", method = RequestMethod.GET,
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package eu.dnetlib.repo.manager.domain.dto;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class RepositoryTerms {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private Boolean consentTermsOfUse;
|
||||||
|
private Boolean fullTextDownload;
|
||||||
|
private Date consentTermsOfUseDate;
|
||||||
|
|
||||||
|
public RepositoryTerms() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getConsentTermsOfUse() {
|
||||||
|
return consentTermsOfUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConsentTermsOfUse(Boolean consentTermsOfUse) {
|
||||||
|
this.consentTermsOfUse = consentTermsOfUse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getFullTextDownload() {
|
||||||
|
return fullTextDownload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFullTextDownload(Boolean fullTextDownload) {
|
||||||
|
this.fullTextDownload = fullTextDownload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getConsentTermsOfUseDate() {
|
||||||
|
return consentTermsOfUseDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConsentTermsOfUseDate(Date consentTermsOfUseDate) {
|
||||||
|
this.consentTermsOfUseDate = consentTermsOfUseDate;
|
||||||
|
}
|
||||||
|
}
|
|
@ -981,7 +981,7 @@ LOGGER.debug("json: " + jsonArray);
|
||||||
private UriComponents searchDatasource(String page, String size) {
|
private UriComponents searchDatasource(String page, String size) {
|
||||||
|
|
||||||
return UriComponentsBuilder
|
return UriComponentsBuilder
|
||||||
.fromHttpUrl(baseAddress + "/ds/search/")
|
.fromHttpUrl(baseAddress + "/ds/searchdetails/")
|
||||||
.path("/{page}/{size}/")
|
.path("/{page}/{size}/")
|
||||||
.queryParam("requestSortBy", "officialname")
|
.queryParam("requestSortBy", "officialname")
|
||||||
.queryParam("order", "ASCENDING")
|
.queryParam("order", "ASCENDING")
|
||||||
|
|
|
@ -10,7 +10,6 @@ import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.security.oauth2.common.exceptions.UnauthorizedClientException;
|
import org.springframework.security.oauth2.common.exceptions.UnauthorizedClientException;
|
||||||
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
|
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
|
||||||
import org.springframework.session.Session;
|
import org.springframework.session.Session;
|
||||||
//import org.springframework.session.ExpiringSession;
|
|
||||||
import org.springframework.session.FindByIndexNameSessionRepository;
|
import org.springframework.session.FindByIndexNameSessionRepository;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
@ -27,10 +26,10 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
|
||||||
@Autowired
|
@Autowired
|
||||||
FindByIndexNameSessionRepository sessions;
|
FindByIndexNameSessionRepository sessions;
|
||||||
|
|
||||||
public void update(String email, Collection<? extends GrantedAuthority> authorities) {
|
public void update(String id, Update update) {
|
||||||
if (sessions != null) {
|
if (sessions != null) {
|
||||||
Map<String, Session> map = sessions.
|
Map<String, Session> map = sessions.
|
||||||
findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, email);
|
findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, id);
|
||||||
if (map != null) {
|
if (map != null) {
|
||||||
logger.debug(map.values().toArray().length);
|
logger.debug(map.values().toArray().length);
|
||||||
for (Session session : map.values()) {
|
for (Session session : map.values()) {
|
||||||
|
@ -40,9 +39,9 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
|
||||||
Authentication authentication = securityContext.getAuthentication();
|
Authentication authentication = securityContext.getAuthentication();
|
||||||
if (authentication instanceof OIDCAuthenticationToken) {
|
if (authentication instanceof OIDCAuthenticationToken) {
|
||||||
OIDCAuthenticationToken authOIDC = (OIDCAuthenticationToken) authentication;
|
OIDCAuthenticationToken authOIDC = (OIDCAuthenticationToken) authentication;
|
||||||
logger.debug(authorities);
|
logger.debug(update.authorities(authOIDC.getAuthorities()));
|
||||||
securityContext.setAuthentication(new OIDCAuthenticationToken(authOIDC.getSub(), authOIDC.getIssuer(),
|
securityContext.setAuthentication(new OIDCAuthenticationToken(authOIDC.getSub(), authOIDC.getIssuer(),
|
||||||
authOIDC.getUserInfo(), authorities, authOIDC.getIdToken(),
|
authOIDC.getUserInfo(), update.authorities(authOIDC.getAuthorities()), authOIDC.getIdToken(),
|
||||||
authOIDC.getAccessTokenValue(), authOIDC.getRefreshTokenValue()));
|
authOIDC.getAccessTokenValue(), authOIDC.getRefreshTokenValue()));
|
||||||
logger.debug("Update authorities");
|
logger.debug("Update authorities");
|
||||||
session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, securityContext);
|
session.setAttribute(SPRING_SECURITY_CONTEXT_KEY, securityContext);
|
||||||
|
@ -54,13 +53,8 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update(String email, Update update) {
|
public void addRole(String id, GrantedAuthority role) {
|
||||||
Collection<? extends GrantedAuthority> authorities = update.authorities(SecurityContextHolder.getContext().getAuthentication().getAuthorities());
|
this.update(id, old -> {
|
||||||
this.update(email, authorities);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addRole(String email, GrantedAuthority role) {
|
|
||||||
this.update(email, old -> {
|
|
||||||
HashSet<GrantedAuthority> authorities = new HashSet<>(old);
|
HashSet<GrantedAuthority> authorities = new HashSet<>(old);
|
||||||
authorities.add(role);
|
authorities.add(role);
|
||||||
return authorities;
|
return authorities;
|
||||||
|
@ -77,8 +71,8 @@ public class AuthoritiesUpdater extends HttpSessionSecurityContextRepository {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeRole(String email, GrantedAuthority role) {
|
public void removeRole(String id, GrantedAuthority role) {
|
||||||
this.update(email, old -> {
|
this.update(id, old -> {
|
||||||
HashSet<GrantedAuthority> authorities = new HashSet<>(old);
|
HashSet<GrantedAuthority> authorities = new HashSet<>(old);
|
||||||
authorities.remove(role);
|
authorities.remove(role);
|
||||||
return authorities;
|
return authorities;
|
||||||
|
|
|
@ -5,19 +5,26 @@ import com.google.gson.JsonElement;
|
||||||
import eu.dnetlib.repo.manager.domain.dto.User;
|
import eu.dnetlib.repo.manager.domain.dto.User;
|
||||||
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
import eu.dnetlib.repo.manager.exception.ResourceNotFoundException;
|
||||||
import eu.dnetlib.repo.manager.service.aai.registry.AaiRegistryService;
|
import eu.dnetlib.repo.manager.service.aai.registry.AaiRegistryService;
|
||||||
|
import org.apache.log4j.LogManager;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
import org.mitre.openid.connect.model.OIDCAuthenticationToken;
|
||||||
import org.mitre.openid.connect.model.UserInfo;
|
import org.mitre.openid.connect.model.UserInfo;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service("authorizationService")
|
@Service("authorizationService")
|
||||||
public class AuthorizationServiceImpl implements AuthorizationService {
|
public class AuthorizationServiceImpl implements AuthorizationService {
|
||||||
|
|
||||||
|
private static final Logger logger = LogManager.getLogger(AuthorizationServiceImpl.class);
|
||||||
|
|
||||||
public static final String SUPER_ADMINISTRATOR = "SUPER_ADMINISTRATOR";
|
public static final String SUPER_ADMINISTRATOR = "SUPER_ADMINISTRATOR";
|
||||||
public static final String CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR = "CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR";
|
public static final String CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR = "CONTENT_PROVIDER_DASHBOARD_ADMINISTRATOR";
|
||||||
public static final String REGISTERED_USER = "REGISTERED_USER";
|
public static final String REGISTERED_USER = "REGISTERED_USER";
|
||||||
|
@ -131,17 +138,11 @@ public class AuthorizationServiceImpl implements AuthorizationService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<String> getUserRoles() {
|
public Collection<String> getUserRoles() {
|
||||||
List<String> roles;
|
Collection<String> roles;
|
||||||
JsonArray entitlements;
|
|
||||||
UserInfo userInfo = ((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo();
|
UserInfo userInfo = ((OIDCAuthenticationToken) SecurityContextHolder.getContext().getAuthentication()).getUserInfo();
|
||||||
if (userInfo.getSource().getAsJsonArray("edu_person_entitlements") != null) {
|
roles = getUserRoles(userInfo.getEmail());
|
||||||
entitlements = userInfo.getSource().getAsJsonArray("edu_person_entitlements");
|
|
||||||
} else if (userInfo.getSource().getAsJsonArray("eduperson_entitlement") != null) {
|
logger.debug(String.format("User Roles: %s", String.join(",", roles)));
|
||||||
entitlements = userInfo.getSource().getAsJsonArray("eduperson_entitlement");
|
|
||||||
} else {
|
|
||||||
entitlements = new JsonArray();
|
|
||||||
}
|
|
||||||
roles = AuthoritiesMapper.entitlementRoles(entitlements);
|
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,8 @@ public class Converter {
|
||||||
|
|
||||||
Repository repository = new Repository();
|
Repository repository = new Repository();
|
||||||
|
|
||||||
JSONObject datasource = repositoryObject.getJSONObject("datasource");
|
// JSONObject datasource = repositoryObject.getJSONObject("datasource");
|
||||||
|
JSONObject datasource = repositoryObject;
|
||||||
|
|
||||||
//if( datasource.equals(null))
|
//if( datasource.equals(null))
|
||||||
// return null;
|
// return null;
|
||||||
|
@ -103,11 +104,23 @@ public class Converter {
|
||||||
repository.setCountryCode(countryCode);
|
repository.setCountryCode(countryCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repository.setConsentTermsOfUse(convertStringToBoolean(datasource.get("consentTermsOfUse").toString()));
|
||||||
|
try {
|
||||||
|
repository.setConsentTermsOfUseDate(convertStringToDate(datasource.get("consentTermsOfUseDate").toString()));
|
||||||
|
} catch (JSONException e) {
|
||||||
|
repository.setConsentTermsOfUseDate(null);
|
||||||
|
}
|
||||||
|
repository.setFullTextDownload(convertStringToBoolean(datasource.get("fullTextDownload").toString()));
|
||||||
|
|
||||||
/* identities field */
|
/* identities field */
|
||||||
|
|
||||||
return repository;
|
return repository;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Boolean convertStringToBoolean(String value) {
|
||||||
|
return value.equals("null") ? null : Boolean.valueOf(value);
|
||||||
|
}
|
||||||
|
|
||||||
public static Date convertStringToDate(String date) {
|
public static Date convertStringToDate(String date) {
|
||||||
|
|
||||||
if (Objects.equals(date, "null"))
|
if (Objects.equals(date, "null"))
|
||||||
|
@ -169,6 +182,11 @@ public class Converter {
|
||||||
repositorySnippet.setRegisteredby(repositorySnippetObject.get("registeredby").toString());
|
repositorySnippet.setRegisteredby(repositorySnippetObject.get("registeredby").toString());
|
||||||
if (repositorySnippet.getRegisteredby().equals("null"))
|
if (repositorySnippet.getRegisteredby().equals("null"))
|
||||||
repositorySnippet.setRegisteredby("");
|
repositorySnippet.setRegisteredby("");
|
||||||
|
|
||||||
|
repositorySnippet.setConsentTermsOfUse(repositorySnippetObject.get("consenttermsofuse").toString());
|
||||||
|
repositorySnippet.setFullTextDownload(repositorySnippetObject.get("fulltextdownload").toString());
|
||||||
|
repositorySnippet.setConsentTermsOfUseDate(convertStringToDate(repositorySnippetObject.get("consenttermsofusedate").toString()));
|
||||||
|
|
||||||
return repositorySnippet;
|
return repositorySnippet;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -296,6 +314,9 @@ public class Converter {
|
||||||
}
|
}
|
||||||
|
|
||||||
repositoryMap.put("subjects", "");
|
repositoryMap.put("subjects", "");
|
||||||
|
repositoryMap.put("consentTermsOfUse", repository.getConsentTermsOfUse());
|
||||||
|
repositoryMap.put("fullTextDownload", repository.getFullTextDownload());
|
||||||
|
repositoryMap.put("consentTermsOfUseDate", convertDateToString(repository.getConsentTermsOfUseDate()));
|
||||||
|
|
||||||
return mapper.writeValueAsString(repositoryMap);
|
return mapper.writeValueAsString(repositoryMap);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue