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:06 UTC

[archiva-redback-core] branch master updated (da0271b -> 292e0de)

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

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


    from da0271b  Using nested test
     new 48cb1f1  Adding test case for user service
     new 14ebb1e  Removing system id from user json
     new 5caf69b  Adding exist check and creation time for addUser in UserManager
     new bb96033  Adding TODO for ldap user mapper
     new b3430e0  Modifying user model for v2 REST API
     new 292e0de  Adding null check for sortFields

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../redback/common/ldap/user/LdapUserMapper.java   |  1 +
 .../archiva/redback/rest/api/model/v2/User.java    | 67 +---------------
 .../rest/services/v2/DefaultUserService.java       |  9 ++-
 .../rest/services/v2/NativeUserServiceTest.java    | 88 +++++++++++++++++-----
 .../redback/rest/services/v2/UserServiceTest.java  |  1 -
 .../archiva/redback/users/UserExistsException.java | 19 +++--
 .../archiva/redback/users/jpa/JpaUserManager.java  | 16 ++--
 .../redback/users/ldap/LdapUserManager.java        | 14 ++++
 .../redback/users/memory/MemoryUserManager.java    | 21 +++++-
 9 files changed, 133 insertions(+), 103 deletions(-)
 copy redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/ObjectNotFoundException.java => redback-users/redback-users-api/src/main/java/org/apache/archiva/redback/users/UserExistsException.java (72%)


[archiva-redback-core] 04/06: Adding TODO for ldap user mapper

Posted by ma...@apache.org.
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 bb9603349d61f49af937066022fc2fd0c9178770
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Nov 8 14:22:02 2020 +0100

    Adding TODO for ldap user mapper
---
 .../java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java
index a2ee149..b83e7d0 100644
--- a/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java
+++ b/redback-common/redback-common-ldap/src/main/java/org/apache/archiva/redback/common/ldap/user/LdapUserMapper.java
@@ -35,6 +35,7 @@ import javax.naming.directory.BasicAttributes;
 import java.util.Date;
 
 /**
+ * @TODO: Try to retrieve createTimestamp and modifyTimestamp attributes for setting the corresponding user properties
  * @author Jesse
  */
 @Service( "userMapper#ldap" )


[archiva-redback-core] 06/06: Adding null check for sortFields

Posted by ma...@apache.org.
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 292e0defcb21f5b036e9a20f993aa19636d56937
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Mon Nov 9 00:21:59 2020 +0100

    Adding null check for sortFields
---
 .../archiva/redback/rest/services/v2/DefaultUserService.java       | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java b/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java
index d432482..5c38847 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java
@@ -95,6 +95,7 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiFunction;
@@ -122,6 +123,8 @@ public class DefaultUserService
         ORDER_MAP.put( "fullName", Comparator.comparing( org.apache.archiva.redback.users.User::getFullName) );
         ORDER_MAP.put( "email", Comparator.comparing( org.apache.archiva.redback.users.User::getEmail) );
         ORDER_MAP.put( "created", Comparator.comparing( org.apache.archiva.redback.users.User::getAccountCreationDate) );
+        ORDER_MAP.put( "lastLogin", Comparator.comparing( org.apache.archiva.redback.users.User::getLastLoginDate) );
+        ORDER_MAP.put( "validated", Comparator.comparing( org.apache.archiva.redback.users.User::isValidated) );
 
         FILTER_MAP.put( "user_id", ( String q, org.apache.archiva.redback.users.User u ) -> StringUtils.containsIgnoreCase( u.getUsername( ), q ) );
         FILTER_MAP.put( "fullName", ( String q, org.apache.archiva.redback.users.User u ) -> StringUtils.containsIgnoreCase( u.getFullName( ), q ) );
@@ -363,9 +366,9 @@ public class DefaultUserService
     Comparator<org.apache.archiva.redback.users.User> getComparator( List<String> orderBy, boolean ascending) {
         if (ascending)
         {
-            return orderBy.stream( ).map( ( String name ) -> getAttributeComparator( name ) ).reduce( Comparator::thenComparing ).get( );
+            return orderBy.stream( ).map( ( String name ) -> getAttributeComparator( name ) ).filter( Objects::nonNull ).reduce( Comparator::thenComparing ).get( );
         } else {
-            return orderBy.stream( ).map( ( String name ) -> getAttributeComparator( name ).reversed() ).reduce( Comparator::thenComparing ).get( );
+            return orderBy.stream( ).map( ( String name ) -> getAttributeComparator( name ).reversed() ).filter( Objects::nonNull ).reduce( Comparator::thenComparing ).get( );
         }
     }
 


[archiva-redback-core] 05/06: Modifying user model for v2 REST API

Posted by ma...@apache.org.
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 b3430e067bfbf255f03c43c7c03428af6ab9aa4b
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Nov 8 14:22:50 2020 +0100

    Modifying user model for v2 REST API
---
 .../archiva/redback/rest/api/model/v2/User.java    | 54 ++--------------------
 .../rest/services/v2/DefaultUserService.java       |  2 -
 .../redback/rest/services/v2/UserServiceTest.java  |  1 -
 3 files changed, 3 insertions(+), 54 deletions(-)

diff --git a/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java b/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java
index 67dc792..9209aa4 100644
--- a/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java
+++ b/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java
@@ -52,8 +52,6 @@ public class User
 
     private boolean passwordChangeRequired;
 
-    private boolean permanent;
-
     private String confirmPassword;
 
     // Display Only Fields.
@@ -77,18 +75,6 @@ public class User
     private List<String> assignedRoles;
 
     /**
-     * with some userManagerImpl it's not possible to edit users;
-     * @since 2.1
-     */
-    private boolean readOnly;
-
-    /**
-     * as we can user multiple userManagers implementation we must track from which one this one comes.
-     * @since 2.1
-     */
-    private String userManagerId;
-
-    /**
      * for request validation
      *
      * @since 2.2
@@ -119,8 +105,6 @@ public class User
         this.setPassword( user.getPassword() );
         this.setValidated( user.isValidated() );
         this.setPasswordChangeRequired( user.isPasswordChangeRequired() );
-        this.setPermanent( user.isPermanent() );
-        this.setUserManagerId( user.getUserManagerId() );
 
         if (user.getAccountCreationDate()==null) {
             setTimestampAccountCreationByInstant( Instant.EPOCH );
@@ -142,7 +126,7 @@ public class User
     }
 
 
-    @Schema( name = "user_id", description = "The user id" )
+    @Schema( name = "user_id", description = "The user id", required = true )
     @XmlElement( name = "user_id" )
     public String getUserId( )
     {
@@ -198,7 +182,7 @@ public class User
         this.locked = isLocked;
     }
 
-
+    @Schema(description = "The password. This is required for creating new users." )
     public String getPassword()
     {
         return password;
@@ -209,6 +193,7 @@ public class User
         this.password = password;
     }
 
+    @Schema(description = "True, if user has to change password")
     public boolean isPasswordChangeRequired()
     {
         return passwordChangeRequired;
@@ -219,16 +204,6 @@ public class User
         this.passwordChangeRequired = passwordChangeRequired;
     }
 
-    public boolean isPermanent()
-    {
-        return permanent;
-    }
-
-    public void setPermanent( boolean permanent )
-    {
-        this.permanent = permanent;
-    }
-
     public String getConfirmPassword()
     {
         return confirmPassword;
@@ -304,26 +279,6 @@ public class User
         this.assignedRoles = assignedRoles;
     }
 
-    public boolean isReadOnly()
-    {
-        return readOnly;
-    }
-
-    public void setReadOnly( boolean readOnly )
-    {
-        this.readOnly = readOnly;
-    }
-
-    public String getUserManagerId()
-    {
-        return userManagerId;
-    }
-
-    public void setUserManagerId( String userManagerId )
-    {
-        this.userManagerId = userManagerId;
-    }
-
     public String getValidationToken() {
         return validationToken;
     }
@@ -343,15 +298,12 @@ public class User
             ", locked=" + locked +
             //", password='" + password + '\'' +
             ", passwordChangeRequired=" + passwordChangeRequired +
-            ", permanent=" + permanent +
             ", confirmPassword='" + confirmPassword + '\'' +
             ", timestampAccountCreation='" + timestampAccountCreation + '\'' +
             ", timestampLastLogin='" + timestampLastLogin + '\'' +
             ", timestampLastPasswordChange='" + timestampLastPasswordChange + '\'' +
             ", previousPassword='" + currentPassword + '\'' +
             ", assignedRoles=" + assignedRoles +
-            ", readOnly=" + readOnly +
-            ", userManagerId='" + userManagerId + '\'' +
             ", validationToken='" + validationToken + '\'' +
             '}';
     }
diff --git a/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java b/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java
index 000a4ce..d432482 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/v2/DefaultUserService.java
@@ -260,7 +260,6 @@ public class DefaultUserService
             u.setPassword( user.getPassword() );
             u.setLocked( user.isLocked() );
             u.setPasswordChangeRequired( user.isPasswordChangeRequired() );
-            u.setPermanent( user.isPermanent() );
             u.setValidated( user.isValidated() );
             u = userManager.addUser( u );
             if ( !user.isPasswordChangeRequired() )
@@ -522,7 +521,6 @@ public class DefaultUserService
             if ( !StringUtils.isEmpty( user.getPassword( ) ) )
                 rawUser.setPassword( user.getPassword() );
             rawUser.setPasswordChangeRequired( user.isPasswordChangeRequired() );
-            rawUser.setPermanent( user.isPermanent() );
 
             org.apache.archiva.redback.users.User updatedUser = userManager.updateUser( rawUser );
 
diff --git a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/UserServiceTest.java b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/UserServiceTest.java
index 5469492..eab9e2b 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/UserServiceTest.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/UserServiceTest.java
@@ -539,7 +539,6 @@ public class UserServiceTest
             // START SNIPPET: create-user
             User user = new User( "toto", "toto the king", "toto@toto.fr", false, false );
             user.setPassword( "foo123" );
-            user.setPermanent( false );
             user.setPasswordChangeRequired( false );
             user.setLocked( false );
             user.setValidated( true );


[archiva-redback-core] 02/06: Removing system id from user json

Posted by ma...@apache.org.
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 14ebb1e898616390818376674979f879b1f696a2
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sat Nov 7 21:29:34 2020 +0100

    Removing system id from user json
---
 .../archiva/redback/rest/api/model/v2/User.java       | 13 -------------
 .../rest/services/v2/NativeUserServiceTest.java       | 19 ++++++++-----------
 2 files changed, 8 insertions(+), 24 deletions(-)

diff --git a/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java b/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java
index a2537aa..67dc792 100644
--- a/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java
+++ b/redback-integrations/redback-rest/redback-rest-api/src/main/java/org/apache/archiva/redback/rest/api/model/v2/User.java
@@ -38,8 +38,6 @@ public class User
 
     private static final long serialVersionUID = 7457798933140993643L;
 
-    private String id;
-
     private String userId;
 
     private String fullName;
@@ -123,7 +121,6 @@ public class User
         this.setPasswordChangeRequired( user.isPasswordChangeRequired() );
         this.setPermanent( user.isPermanent() );
         this.setUserManagerId( user.getUserManagerId() );
-        this.setId( user.getId() );
 
         if (user.getAccountCreationDate()==null) {
             setTimestampAccountCreationByInstant( Instant.EPOCH );
@@ -335,16 +332,6 @@ public class User
         this.validationToken = validationToken;
     }
 
-    public String getId( )
-    {
-        return id;
-    }
-
-    public void setId( String id )
-    {
-        this.id = id;
-    }
-
     @Override
     public String toString()
     {
diff --git a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java
index 1251176..3f9e93c 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java
@@ -23,6 +23,7 @@ import org.apache.archiva.redback.rest.api.model.v2.Operation;
 import org.apache.archiva.redback.rest.api.model.v2.Permission;
 import org.apache.archiva.redback.rest.api.model.v2.RegistrationKey;
 import org.apache.archiva.redback.rest.api.model.v2.User;
+import org.apache.archiva.redback.rest.api.model.v2.UserInfo;
 import org.apache.archiva.redback.rest.api.model.v2.VerificationStatus;
 import org.apache.archiva.redback.rest.services.mock.EmailMessage;
 import org.junit.jupiter.api.AfterAll;
@@ -83,7 +84,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
         Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
             .when( ).get( ).then( ).statusCode( 200 ).extract( ).response( );
         assertNotNull( response );
-        List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+        List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
         assertNotNull( userData );
         assertEquals( 2, userData.size( ) );
         assertEquals( Integer.valueOf( 0 ), response.body( ).jsonPath( ).get( "pagination.offset" ) );
@@ -130,11 +131,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).get( ).then( ).statusCode( 200 ).extract( ).response( );
             assertNotNull( response );
-            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
-            for ( User user : userData )
-            {
-                System.out.println( "User " + user.getUserId( ) );
-            }
+            List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
             assertNotNull( userData );
             assertEquals( "admin", userData.get( 0 ).getUserId( ) );
             assertEquals( userNum + 2, userData.size( ) );
@@ -152,7 +149,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             params.put( "offset", Integer.toString( 1 ) );
             Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
             assertNotNull( userData );
             assertEquals( "aragorn000", userData.get( 0 ).getUserId( ) );
             assertEquals( "aragorn009", userData.get( 9 ).getUserId( ) );
@@ -171,7 +168,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             params.put( "orderBy", "email" );
             Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
             assertNotNull( userData );
             // admin user has toto@toto.org as email so is after aragorn
             assertEquals( "aragorn003@lordoftherings.org", userData.get( 0 ).getEmail() );
@@ -192,7 +189,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             params.put( "orderBy", "fullName" );
             Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
             assertNotNull( userData );
             // admin user has toto@toto.org as email so is after aragorn
             assertEquals( "Aragorn King of Gondor 010", userData.get( 0 ).getFullName() );
@@ -213,7 +210,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             params.put( "order", "desc" );
             Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
             assertNotNull( userData );
             assertEquals( "guest", userData.get( 0 ).getUserId( ) );
             assertEquals( "aragorn016", userData.get( 9 ).getUserId( ) );
@@ -231,7 +228,7 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             params.put( "q", "015" );
             Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<UserInfo> userData = response.body( ).jsonPath( ).getList( "data", UserInfo.class );
             assertNotNull( userData );
             assertEquals( "aragorn010", userData.get( 0 ).getUserId( ) );
             assertEquals( "aragorn015@lordoftherings.org", userData.get( 0 ).getEmail( ) );


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

Posted by ma...@apache.org.
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()


[archiva-redback-core] 01/06: Adding test case for user service

Posted by ma...@apache.org.
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 48cb1f15af0aef886bec82402d7f142a7449b198
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sat Nov 7 17:16:17 2020 +0100

    Adding test case for user service
---
 .../rest/services/v2/NativeUserServiceTest.java    | 77 ++++++++++++++++++----
 1 file changed, 65 insertions(+), 12 deletions(-)

diff --git a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java
index 22f4724..1251176 100644
--- a/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java
+++ b/redback-integrations/redback-rest/redback-rest-services/src/test/java/org/apache/archiva/redback/rest/services/v2/NativeUserServiceTest.java
@@ -55,6 +55,7 @@ import static org.junit.jupiter.api.Assertions.*;
 @TestInstance( TestInstance.Lifecycle.PER_CLASS )
 @Tag( "rest-native" )
 @TestMethodOrder( MethodOrderer.Random.class )
+@DisplayName( "Native REST tests for V2 UserService" )
 public class NativeUserServiceTest extends AbstractNativeRestServices
 {
     @Override
@@ -107,10 +108,12 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             for ( int i = 0; i < userNum; i++ )
             {
                 String suffix = String.format( "%03d", i );
+                String reverseSuffix = String.format( "%03d", userNum - i );
+                String modSuffix = String.format( "%03d", ( i + 5 ) % userNum );
                 Map<String, Object> jsonAsMap = new HashMap<>( );
                 jsonAsMap.put( "user_id", "aragorn" + suffix );
-                jsonAsMap.put( "email", "aragorn" + suffix + "@lordoftherings.org" );
-                jsonAsMap.put( "fullName", "Aragorn King of Gondor " + i );
+                jsonAsMap.put( "email", "aragorn" + reverseSuffix + "@lordoftherings.org" );
+                jsonAsMap.put( "fullName", "Aragorn King of Gondor " + modSuffix );
                 jsonAsMap.put( "password", "pAssw0rD" );
                 Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                     .body( jsonAsMap )
@@ -157,14 +160,60 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             assertEquals( Integer.valueOf( 1 ), response.body( ).jsonPath( ).get( "pagination.offset" ) );
             assertEquals( Integer.valueOf( 10 ), response.body( ).jsonPath( ).get( "pagination.limit" ) );
             assertEquals( Integer.valueOf( userNum + 2 ), response.body( ).jsonPath( ).get( "pagination.totalCount" ) );
+        }
 
-            params = new HashMap<>( );
+        @Test
+        void getMultipleUsersWithPagingOrderByMail( )
+        {
+            HashMap<String, String> params = new HashMap<>( );
+            params.put( "limit", Integer.toString( 5 ) );
+            params.put( "offset", Integer.toString( 3 ) );
+            params.put( "orderBy", "email" );
+            Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+                .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
+            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            assertNotNull( userData );
+            // admin user has toto@toto.org as email so is after aragorn
+            assertEquals( "aragorn003@lordoftherings.org", userData.get( 0 ).getEmail() );
+            assertEquals( "aragorn022", userData.get( 0 ).getUserId() );
+            assertEquals( "aragorn007@lordoftherings.org", userData.get( 4 ).getEmail( ) );
+            assertEquals( 5, userData.size( ) );
+            assertEquals( Integer.valueOf( 3 ), response.body( ).jsonPath( ).get( "pagination.offset" ) );
+            assertEquals( Integer.valueOf( 5 ), response.body( ).jsonPath( ).get( "pagination.limit" ) );
+            assertEquals( Integer.valueOf( userNum + 2 ), response.body( ).jsonPath( ).get( "pagination.totalCount" ) );
+        }
+
+        @Test
+        void getMultipleUsersWithPagingOrderByFullName( )
+        {
+            HashMap<String, String> params = new HashMap<>( );
+            params.put( "limit", Integer.toString( 8 ) );
+            params.put( "offset", Integer.toString( 10 ) );
+            params.put( "orderBy", "fullName" );
+            Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+                .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
+            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            assertNotNull( userData );
+            // admin user has toto@toto.org as email so is after aragorn
+            assertEquals( "Aragorn King of Gondor 010", userData.get( 0 ).getFullName() );
+            assertEquals( "aragorn005", userData.get(0 ).getUserId() );
+            assertEquals( "Aragorn King of Gondor 017", userData.get( 7 ).getFullName() );
+            assertEquals( 8, userData.size( ) );
+            assertEquals( Integer.valueOf( 10 ), response.body( ).jsonPath( ).get( "pagination.offset" ) );
+            assertEquals( Integer.valueOf( 8 ), response.body( ).jsonPath( ).get( "pagination.limit" ) );
+            assertEquals( Integer.valueOf( userNum + 2 ), response.body( ).jsonPath( ).get( "pagination.totalCount" ) );
+        }
+
+        @Test
+        void getMultipleUsersWithPagingReverseOrder( )
+        {
+            HashMap<String, String> params = new HashMap<>( );
             params.put( "limit", Integer.toString( 10 ) );
             params.put( "offset", Integer.toString( 0 ) );
             params.put( "order", "desc" );
-            response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+            Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
             assertNotNull( userData );
             assertEquals( "guest", userData.get( 0 ).getUserId( ) );
             assertEquals( "aragorn016", userData.get( 9 ).getUserId( ) );
@@ -172,21 +221,25 @@ public class NativeUserServiceTest extends AbstractNativeRestServices
             assertEquals( Integer.valueOf( 0 ), response.body( ).jsonPath( ).get( "pagination.offset" ) );
             assertEquals( Integer.valueOf( 10 ), response.body( ).jsonPath( ).get( "pagination.limit" ) );
             assertEquals( Integer.valueOf( userNum + 2 ), response.body( ).jsonPath( ).get( "pagination.totalCount" ) );
-
-            params = new HashMap<>( );
+        }
+        @Test
+        void getMultipleUsersWithPagingAndQuery( ) {
+        HashMap<String, String> params = new HashMap<>( );
             params.put( "limit", Integer.toString( 10 ) );
             params.put( "offset", Integer.toString( 0 ) );
             params.put( "order", "asc" );
             params.put( "q", "015" );
-            response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
+            Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
                 .when( ).params( params ).get( ).then( ).statusCode( 200 ).extract( ).response( );
-            userData = response.body( ).jsonPath( ).getList( "data", User.class );
+            List<User> userData = response.body( ).jsonPath( ).getList( "data", User.class );
             assertNotNull( userData );
-            assertEquals( "aragorn015", userData.get( 0 ).getUserId( ) );
-            assertEquals( 1, userData.size( ) );
+            assertEquals( "aragorn010", userData.get( 0 ).getUserId( ) );
+            assertEquals( "aragorn015@lordoftherings.org", userData.get( 0 ).getEmail( ) );
+            assertEquals( "aragorn015", userData.get( 1 ).getUserId( ) );
+            assertEquals( 2, userData.size( ) );
             assertEquals( Integer.valueOf( 0 ), response.body( ).jsonPath( ).get( "pagination.offset" ) );
             assertEquals( Integer.valueOf( 10 ), response.body( ).jsonPath( ).get( "pagination.limit" ) );
-            assertEquals( Integer.valueOf( 1 ), response.body( ).jsonPath( ).get( "pagination.totalCount" ) );
+            assertEquals( Integer.valueOf( 2 ), response.body( ).jsonPath( ).get( "pagination.totalCount" ) );
 
         }