You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2020/11/08 23:22:09 UTC

[archiva-redback-core] 03/06: Adding exist check and creation time for addUser in UserManager

This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva-redback-core.git

commit 5caf69ba8c3c4b4217f336ecc6e001bff2bfa05a
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Nov 8 14:21:32 2020 +0100

    Adding exist check and creation time for addUser in UserManager
---
 .../archiva/redback/users/UserExistsException.java | 42 ++++++++++++++++++++++
 .../archiva/redback/users/jpa/JpaUserManager.java  | 16 +++++----
 .../redback/users/ldap/LdapUserManager.java        | 14 ++++++++
 .../redback/users/memory/MemoryUserManager.java    | 21 +++++++++--
 4 files changed, 84 insertions(+), 9 deletions(-)

diff --git a/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/UserExistsException.java b/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/UserExistsException.java
new file mode 100644
index 0000000..8df422e
--- /dev/null
+++ b/redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/UserExistsException.java
@@ -0,0 +1,42 @@
+package org.apache.archiva.redback.users;/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+public class UserExistsException extends UserManagerException
+{
+    public UserExistsException( )
+    {
+    }
+
+    public UserExistsException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public UserExistsException( String message )
+    {
+        super( message );
+    }
+
+    public UserExistsException( Throwable cause )
+    {
+        super( cause );
+    }
+}
diff --git a/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java b/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java
index 1ca7f47..541c177 100644
--- a/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java
+++ b/redback-users/redback-users-providers/redback-users-jpa/src/main/java/org/apache/archiva/redback/users/jpa/JpaUserManager.java
@@ -24,6 +24,7 @@ import org.apache.archiva.redback.users.AbstractUserManager;
 import org.apache.archiva.redback.users.Messages;
 import org.apache.archiva.redback.users.PermanentUserException;
 import org.apache.archiva.redback.users.User;
+import org.apache.archiva.redback.users.UserExistsException;
 import org.apache.archiva.redback.users.UserManagerException;
 import org.apache.archiva.redback.users.UserNotFoundException;
 import org.apache.archiva.redback.users.UserQuery;
@@ -127,6 +128,10 @@ public class JpaUserManager extends AbstractUserManager {
             throw new IllegalStateException(
                     Messages.getString( "user.manager.cannot.add.user.without.username" ) ); //$NON-NLS-1$
         }
+        if (userExists( user.getUsername() )) {
+            log.debug( "User exists already " + user.getUsername( ) );
+            throw new UserExistsException( "User exists already " + user.getUsername( ) );
+        }
 
         userSecurityPolicy.extensionChangePassword( user );
 
@@ -147,6 +152,8 @@ public class JpaUserManager extends AbstractUserManager {
         if (user.getLastPasswordChange()==null) {
             user.setLastPasswordChange(new Date());
         }
+        user.setAccountCreationDate( new Date(  ) );
+        log.debug( "Adding new user " + user.getUsername( ) );
         em.persist( user );
         return user;
     }
@@ -282,7 +289,7 @@ public class JpaUserManager extends AbstractUserManager {
     @Transactional
     @Override
     public void addUserUnchecked(User user) throws UserManagerException {
-        log.info("addUserUnchecked "+user.getUsername());
+        log.debug("addUserUnchecked "+user.getUsername());
         if ( !( user instanceof JpaUser ) )
         {
             throw new UserManagerException( "Unable to Add User. User object " + user.getClass().getName() +
@@ -294,12 +301,7 @@ public class JpaUserManager extends AbstractUserManager {
             throw new IllegalStateException(
                     Messages.getString( "user.manager.cannot.add.user.without.username" ) ); //$NON-NLS-1$
         }
-
-        TypedQuery<JpaUser> q = em.createQuery("SELECT u FROM JpaUser u", JpaUser.class);
-        for (JpaUser u : q.getResultList()) {
-            log.info("USER FOUND: "+u.getUsername());
-        }
-        log.info("NEW USER "+user.getUsername());
+        user.setAccountCreationDate( new Date(  ) );
         em.persist( user );
 
     }
diff --git a/redback-users/redback-users-providers/redback-users-ldap/src/main/java/org/apache/archiva/redback/users/ldap/LdapUserManager.java b/redback-users/redback-users-providers/redback-users-ldap/src/main/java/org/apache/archiva/redback/users/ldap/LdapUserManager.java
index 07621ee..a6a6388 100644
--- a/redback-users/redback-users-providers/redback-users-ldap/src/main/java/org/apache/archiva/redback/users/ldap/LdapUserManager.java
+++ b/redback-users/redback-users-providers/redback-users-ldap/src/main/java/org/apache/archiva/redback/users/ldap/LdapUserManager.java
@@ -28,6 +28,7 @@ import org.apache.archiva.redback.configuration.UserConfiguration;
 import org.apache.archiva.redback.configuration.UserConfigurationKeys;
 import org.apache.archiva.redback.users.AbstractUserManager;
 import org.apache.archiva.redback.users.User;
+import org.apache.archiva.redback.users.UserExistsException;
 import org.apache.archiva.redback.users.UserManager;
 import org.apache.archiva.redback.users.UserManagerException;
 import org.apache.archiva.redback.users.UserNotFoundException;
@@ -46,6 +47,7 @@ import javax.inject.Named;
 import javax.naming.directory.DirContext;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -123,6 +125,16 @@ public class LdapUserManager
         {
             return null;
         }
+        try
+        {
+            if (checked && userExists( user.getUsername() )){
+                throw new UserExistsException( "User exists already " + user.getUsername( ) );
+            }
+        }
+        catch ( UserManagerException e )
+        {
+            throw new LdapException( "Unexpected LDAP error " + e.getMessage( ) );
+        }
 
         if ( isReadOnly() && GUEST_USERNAME.equals( user.getUsername() ) )
         {
@@ -130,6 +142,8 @@ public class LdapUserManager
             return guestUser;
         }
 
+        user.setAccountCreationDate( new Date( ) );
+
         LdapConnection ldapConnection = getLdapConnection();
         try
         {
diff --git a/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/MemoryUserManager.java b/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/MemoryUserManager.java
index 9527d6f..b67b8fb 100644
--- a/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/MemoryUserManager.java
+++ b/redback-users/redback-users-providers/redback-users-memory/src/main/java/org/apache/archiva/redback/users/memory/MemoryUserManager.java
@@ -23,6 +23,7 @@ import org.apache.archiva.redback.policy.UserSecurityPolicy;
 import org.apache.archiva.redback.users.AbstractUserManager;
 import org.apache.archiva.redback.users.PermanentUserException;
 import org.apache.archiva.redback.users.User;
+import org.apache.archiva.redback.users.UserExistsException;
 import org.apache.archiva.redback.users.UserManager;
 import org.apache.archiva.redback.users.UserManagerException;
 import org.apache.archiva.redback.users.UserNotFoundException;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -96,8 +98,16 @@ public class MemoryUserManager
 
     private Map<Object, User> users = new HashMap<Object, User>();
 
-    public User addUser( User user )
+    public User addUser(User user) throws UserManagerException {
+        return addUser( user, false );
+    }
+
+    private User addUser( User user, boolean checked ) throws UserManagerException
     {
+        if (checked && userExists( user.getUsername() )) {
+            throw new UserExistsException( "User exists already " + user.getUsername( ) );
+        }
+        user.setAccountCreationDate( new Date( ) );
         saveUser( user );
         fireUserManagerUserAdded( user );
 
@@ -176,7 +186,14 @@ public class MemoryUserManager
 
     public void addUserUnchecked( User user )
     {
-        addUser( user );
+        try
+        {
+            addUser( user, false );
+        }
+        catch ( UserManagerException e )
+        {
+            log.error( "User manager exception " + e.getMessage( ) );
+        }
     }
 
     public void eraseDatabase()