From ee8e84b316caf15a5f7d830e4b4821e6d1fadb5a Mon Sep 17 00:00:00 2001
From: "michele.artini"
Date: Mon, 19 Sep 2022 14:33:22 +0200
Subject: [PATCH] new fields in authoeization request
---
.../OAuth2WebSecurityConfig.java | 9 ++++-
.../controller/AdminController.java | 6 ++-
.../controller/HomeController.java | 10 +++++
.../organizations/controller/UserInfo.java | 10 +++++
.../controller/UserRegistration.java | 40 +++++++++++++++++++
.../repository/UserRepository.java | 4 +-
.../organizations/utils/DatabaseUtils.java | 29 +++++++++++---
.../templates/authorizationRequest.html | 30 ++++++++++++--
8 files changed, 124 insertions(+), 14 deletions(-)
create mode 100644 apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserRegistration.java
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/OAuth2WebSecurityConfig.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/OAuth2WebSecurityConfig.java
index 2ff636dc..bf0c5e92 100644
--- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/OAuth2WebSecurityConfig.java
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/OAuth2WebSecurityConfig.java
@@ -1,6 +1,7 @@
package eu.dnetlib.organizations;
import java.util.HashSet;
+import java.util.Optional;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
@@ -124,7 +125,13 @@ public class OAuth2WebSecurityConfig extends WebSecurityConfigurerAdapter {
return (userRequest) -> {
final OidcUser oidcUser = delegate.loadUser(userRequest);
- final String role = "ROLE_" + OpenOrgsConstants.OPENORGS_ROLE_PREFIX + databaseUtils.findUser(oidcUser.getEmail())
+ final Optional user = databaseUtils.findUser(oidcUser.getEmail());
+
+ if (user.isPresent()) {
+ databaseUtils.updateUserDetails(oidcUser.getEmail(), oidcUser.getFullName(), oidcUser.getAttribute("organization"));
+ }
+
+ final String role = "ROLE_" + OpenOrgsConstants.OPENORGS_ROLE_PREFIX + user
.map(User::getRole)
.filter(StringUtils::isNotBlank)
.orElse(UserRole.NOT_AUTHORIZED.toString());
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/AdminController.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/AdminController.java
index fd59c98a..a48f1a4f 100644
--- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/AdminController.java
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/AdminController.java
@@ -47,16 +47,18 @@ public class AdminController extends AbstractDnetController {
private DatabaseUtils dbUtils;
@PostMapping(value = "/registration_api/newUser")
- public Map newUser(final @RequestBody List countries, final Authentication authentication) {
+ public Map newUser(final @RequestBody UserRegistration user, final Authentication authentication) {
final String email = UserInfo.getEmail(authentication);
+ final String fullname = UserInfo.getFullname(authentication);
+ final String organization = UserInfo.getOrganization(authentication);
final Map res = new HashMap<>();
if (!UserInfo.isNotAuthorized(authentication) || userRepository.existsById(email)) {
res.put("status", 2);
} else {
- dbUtils.newUser(email, countries);
+ dbUtils.newUser(email, fullname, organization, user.getReferencePerson(), user.getRequestMessage(), user.getCountries());
res.put("status", 1);
}
return res;
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/HomeController.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/HomeController.java
index f09a5c5a..3bde7bb9 100644
--- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/HomeController.java
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/HomeController.java
@@ -65,6 +65,16 @@ public class HomeController extends AbstractDnetController {
return authentication != null ? UserInfo.getEmail(authentication) : null;
}
+ @ModelAttribute("fullname")
+ public String getUserFullname(final Authentication authentication) {
+ return authentication != null ? UserInfo.getFullname(authentication) : null;
+ }
+
+ @ModelAttribute("organization")
+ public String getUserOrganization(final Authentication authentication) {
+ return authentication != null ? UserInfo.getOrganization(authentication) : null;
+ }
+
@ModelAttribute("sysconf")
public SystemConfiguration getSysConf(final Authentication authentication) {
return systemConfigurationRepository.findById(SystemConfiguration.DEFAULT_ID).get();
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserInfo.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserInfo.java
index cfa32586..8bdf1fe9 100644
--- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserInfo.java
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserInfo.java
@@ -92,4 +92,14 @@ public class UserInfo {
return user instanceof DefaultOidcUser ? ((DefaultOidcUser) user).getEmail() : authentication.getName();
}
+ public static String getFullname(final Authentication authentication) {
+ final Object user = authentication.getPrincipal();
+ return user instanceof DefaultOidcUser ? ((DefaultOidcUser) user).getFullName() : "unknown";
+ }
+
+ public static String getOrganization(final Authentication authentication) {
+ final Object user = authentication.getPrincipal();
+ return user instanceof DefaultOidcUser ? ((DefaultOidcUser) user).getAttribute("organization") : "unknown";
+ }
+
}
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserRegistration.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserRegistration.java
new file mode 100644
index 00000000..3c40d31e
--- /dev/null
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/controller/UserRegistration.java
@@ -0,0 +1,40 @@
+package eu.dnetlib.organizations.controller;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class UserRegistration implements Serializable {
+
+ private static final long serialVersionUID = 4872798305803491565L;
+
+ private String referencePerson;
+
+ private String requestMessage;
+
+ private List countries;
+
+ public String getReferencePerson() {
+ return referencePerson;
+ }
+
+ public void setReferencePerson(final String referencePerson) {
+ this.referencePerson = referencePerson;
+ }
+
+ public String getRequestMessage() {
+ return requestMessage;
+ }
+
+ public void setRequestMessage(final String requestMessage) {
+ this.requestMessage = requestMessage;
+ }
+
+ public List getCountries() {
+ return countries;
+ }
+
+ public void setCountries(final List countries) {
+ this.countries = countries;
+ }
+
+}
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/repository/UserRepository.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/repository/UserRepository.java
index 0d2da87e..6fd5be93 100644
--- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/repository/UserRepository.java
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/repository/UserRepository.java
@@ -11,7 +11,7 @@ import eu.dnetlib.organizations.model.User;
public interface UserRepository extends JpaRepository {
@Modifying
- @Query("update User set last_access = ?2 where email = ?1")
- void updateLastAccess(final String email, OffsetDateTime now);
+ @Query("update User set fullname = ?2, organization = ?3, last_access = ?4 where email = ?1")
+ void updateDetails(final String email, final String fullname, final String organization, OffsetDateTime now);
}
diff --git a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java
index 77399cd8..91b662bd 100644
--- a/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java
+++ b/apps/dnet-orgs-database-application/src/main/java/eu/dnetlib/organizations/utils/DatabaseUtils.java
@@ -339,6 +339,10 @@ public class DatabaseUtils {
@Transactional
public void saveUser(@RequestBody final UserView userView) {
final User user = userRepository.findById(userView.getEmail()).orElseThrow(() -> new RuntimeException("User not found"));
+ user.setFullname(userView.getFullname());
+ user.setOrganization(userView.getOrganization());
+ user.setReferencePerson(userView.getReferencePerson());
+ user.setRequestMessage(userView.getRequestMessage());
user.setRole(userView.getRole());
user.setValid(userView.isValid());
userRepository.save(user);
@@ -356,12 +360,24 @@ public class DatabaseUtils {
}
@Transactional
- public void newUser(final String email, final List countries) {
+ public void newUser(final String email,
+ final String fullname,
+ final String organization,
+ final String referencePerson,
+ final String requestMessage,
+ final List countries) {
+
final User user = new User();
user.setEmail(email);
+ user.setFullname(fullname);
+ user.setOrganization(organization);
+ user.setReferencePerson(referencePerson);
+ user.setRequestMessage(requestMessage);
user.setRole(UserRole.PENDING.name());
user.setValid(false);
+
userRepository.save(user);
+
if (countries != null) {
userCountryRepository.saveAll(countries.stream().map(c -> new UserCountry(email, c)).collect(Collectors.toList()));
}
@@ -536,11 +552,12 @@ public class DatabaseUtils {
@Transactional
public Optional findUser(final String email) {
- final Optional user = userRepository.findById(email);
- if (user.isPresent()) {
- userRepository.updateLastAccess(email, OffsetDateTime.now());
- }
- return user;
+ return userRepository.findById(email);
+ }
+
+ @Transactional
+ public void updateUserDetails(final String email, final String fullname, final String organization) {
+ userRepository.updateDetails(email, fullname, organization, OffsetDateTime.now());
}
private String findFirstString(final List views, final Function mapper) {
diff --git a/apps/dnet-orgs-database-application/src/main/resources/templates/authorizationRequest.html b/apps/dnet-orgs-database-application/src/main/resources/templates/authorizationRequest.html
index 3169d952..b2f785a6 100644
--- a/apps/dnet-orgs-database-application/src/main/resources/templates/authorizationRequest.html
+++ b/apps/dnet-orgs-database-application/src/main/resources/templates/authorizationRequest.html
@@ -50,6 +50,25 @@