From e565828aa3e15887d45cc0346a8f7f16f2cb92c6 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Tue, 26 Sep 2023 10:07:54 +0200
Subject: [PATCH 1/3] correction
 154-message-d-erreur-abscons-suite-a-tentative-de-creation-de-compte-avec-nouvel-identifiant-mais
 #154

---
 .../persistence/AuthenticationService.java    |  7 ++---
 .../oresing/persistence/UserRepository.java   | 26 ++++++++++++++-----
 2 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/src/main/java/fr/inra/oresing/persistence/AuthenticationService.java b/src/main/java/fr/inra/oresing/persistence/AuthenticationService.java
index 86c820db4..9ef753af7 100644
--- a/src/main/java/fr/inra/oresing/persistence/AuthenticationService.java
+++ b/src/main/java/fr/inra/oresing/persistence/AuthenticationService.java
@@ -495,8 +495,9 @@ public class AuthenticationService {
     private OreSiUser updateAccount(OreSiUser user, CreateUserRequest createUserRequest) throws AuthenticationFailure, NoSuchAlgorithmException, InvalidKeySpecException, JsonProcessingException {
         String email = Optional.ofNullable(createUserRequest.getEmail())
                 .filter(mail -> !Strings.isNullOrEmpty(mail))
-                .orElse(user.getEmail());
-        boolean emailChanged = !user.getEmail().equals(email);
+                .orElse(user.getEmail())
+                .toLowerCase();
+        boolean emailChanged = !user.getEmail().toLowerCase().equals(email);
         if (createUserRequest.getNewPassword() != null) {
             Optional.of(createUserRequest.getNewPassword())
                     .filter(password -> !Strings.isNullOrEmpty(password))
@@ -507,7 +508,7 @@ public class AuthenticationService {
         }
         if (emailChanged) {
             user.setAccountstate(OreSiUser.OreSiUserStates.pending);
-            user.setEmail(createUserRequest.getEmail());
+            user.setEmail(createUserRequest.getEmail().toLowerCase());
         }
         setRoleAdmin();
         OreSiUser updateUser = userRepository.update(user);
diff --git a/src/main/java/fr/inra/oresing/persistence/UserRepository.java b/src/main/java/fr/inra/oresing/persistence/UserRepository.java
index 80df53f5e..13c9c5523 100644
--- a/src/main/java/fr/inra/oresing/persistence/UserRepository.java
+++ b/src/main/java/fr/inra/oresing/persistence/UserRepository.java
@@ -27,9 +27,23 @@ public class UserRepository extends JsonTableRepositoryTemplate<OreSiUser> {
 
     @Override
     protected String getUpsertQuery() {
-        return "INSERT INTO " + getTable().getSqlIdentifier() + " (id, login, password, email, accountstate,  authorizations, chartes) SELECT id, login, password, email, accountstate, authorizations, chartes FROM json_populate_recordset(NULL::" + getTable().getSqlIdentifier() + ", :json::json)"
-               + " ON CONFLICT (id) DO UPDATE SET updateDate=current_timestamp, login=EXCLUDED.login, password=EXCLUDED.password, email=EXCLUDED.email, accountstate=EXCLUDED.accountstate, authorizations=EXCLUDED.authorizations, chartes=EXCLUDED.chartes"
-               + " RETURNING id";
+        return """
+                INSERT INTO %1$s (
+                    id, login, password, email, accountstate,  authorizations, chartes
+                ) 
+                SELECT 
+                    id, lower(login), password, lower(email), accountstate, authorizations, chartes 
+                FROM json_populate_recordset(NULL::%1$s, :json::json) 
+                ON CONFLICT (id) 
+                DO UPDATE SET 
+                updateDate=current_timestamp, 
+                login=lower(EXCLUDED.login), 
+                password=EXCLUDED.password, 
+                email=lower(EXCLUDED.email), 
+                accountstate=EXCLUDED.accountstate, 
+                authorizations=EXCLUDED.authorizations, 
+                chartes=EXCLUDED.chartes RETURNING id"""
+                .formatted(getTable().getSqlIdentifier());
     }
 
     @Override
@@ -44,7 +58,7 @@ public class UserRepository extends JsonTableRepositoryTemplate<OreSiUser> {
 
     public Optional<OreSiUser> findByLogin(String login) {
         String query = "SELECT '" + getEntityClass().getName() + "' as \"@class\",  to_jsonb(t) as json FROM " + getTable().getSqlIdentifier() + " t " +
-                       "WHERE login = :login";
+                       "WHERE lower(login) = lower(:login)";
 
         Optional<OreSiUser> result = getNamedParameterJdbcTemplate().query(query,
                         new MapSqlParameterSource("login", login), getJsonRowMapper()).stream()
@@ -54,7 +68,7 @@ public class UserRepository extends JsonTableRepositoryTemplate<OreSiUser> {
 
     public Optional<OreSiUser> findByEmail(String email) {
         String query = "SELECT '" + getEntityClass().getName() + "' as \"@class\",  to_jsonb(t) as json FROM " + getTable().getSqlIdentifier() + " t " +
-                       "WHERE email = :email";
+                       "WHERE lower(email) = lower(:email)";
 
         Optional<OreSiUser> result = getNamedParameterJdbcTemplate().query(query,
                         new MapSqlParameterSource("email", email), getJsonRowMapper()).stream()
@@ -64,7 +78,7 @@ public class UserRepository extends JsonTableRepositoryTemplate<OreSiUser> {
 
     public Optional<OreSiUser> findByLoginAndEmail(String login, String email) {
         String query = "SELECT '" + getEntityClass().getName() + "' as \"@class\",  to_jsonb(t) as json FROM " + getTable().getSqlIdentifier() + " t " +
-                       "WHERE email = :email and login = :login";
+                       "WHERE lower(email) = lower(:email) and lower(login = lower(:login)";
 
         MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource("login", login);
         mapSqlParameterSource.addValue("email", email);
-- 
GitLab


From 29955771a4a93bbc990cbdd4ae76a8c6c6f7cf33 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Tue, 26 Sep 2023 14:43:47 +0200
Subject: [PATCH 2/3] Parenthese manquuante

---
 src/main/java/fr/inra/oresing/persistence/UserRepository.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/fr/inra/oresing/persistence/UserRepository.java b/src/main/java/fr/inra/oresing/persistence/UserRepository.java
index 13c9c5523..949c1b298 100644
--- a/src/main/java/fr/inra/oresing/persistence/UserRepository.java
+++ b/src/main/java/fr/inra/oresing/persistence/UserRepository.java
@@ -78,7 +78,7 @@ public class UserRepository extends JsonTableRepositoryTemplate<OreSiUser> {
 
     public Optional<OreSiUser> findByLoginAndEmail(String login, String email) {
         String query = "SELECT '" + getEntityClass().getName() + "' as \"@class\",  to_jsonb(t) as json FROM " + getTable().getSqlIdentifier() + " t " +
-                       "WHERE lower(email) = lower(:email) and lower(login = lower(:login)";
+                       "WHERE lower(email) = lower(:email) and lower(login) = lower(:login)";
 
         MapSqlParameterSource mapSqlParameterSource = new MapSqlParameterSource("login", login);
         mapSqlParameterSource.addValue("email", email);
-- 
GitLab


From 6b118a584457a6ef5b91922d5572ee41cde702e5 Mon Sep 17 00:00:00 2001
From: TCHERNIATINSKY <philippe.tcherniatinsky@inrae.fr>
Date: Tue, 26 Sep 2023 14:44:05 +0200
Subject: [PATCH 3/3] =?UTF-8?q?R=C3=A9=C3=A9criture=20de=20deploy?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pom.xml | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/pom.xml b/pom.xml
index 19cf02bee..537faf7fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -312,6 +312,22 @@
                     <url>https://forgemia.inra.fr/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
                 </snapshotRepository>
             </distributionManagement>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.springframework.boot</groupId>
+                        <artifactId>spring-boot-maven-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>repackage</id>
+                                <configuration>
+                                    <classifier>exec</classifier>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
 
         <profile>
-- 
GitLab