You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/07/17 10:38:00 UTC

[isis] branch v2 updated: ISIS-2151 fixes seeding of the security module

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

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new 69ba774  ISIS-2151 fixes seeding of the security module
69ba774 is described below

commit 69ba7746562a96191f45eda6eb190fd238fac223
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jul 17 12:37:54 2019 +0200

    ISIS-2151 fixes seeding of the security module
    
    - brings the security module to life with the demo-app
---
 .../domainapp/application/DemoAppManifest.java     |  8 +++
 .../permission/ApplicationPermissionValueSet.java  | 20 +++---
 .../permission/PermissionsEvaluationService.java   |  4 --
 .../PermissionsEvaluationServiceAbstract.java      | 14 +++--
 ...PermissionsEvaluationServiceAllowBeatsVeto.java |  3 +-
 ...PermissionsEvaluationServiceVetoBeatsAllow.java |  9 ++-
 extensions/secman/encryption-jbcrypt/pom.xml       |  1 -
 .../secman/jdo/seed/SeedSecurityModuleService.java | 72 ++++------------------
 8 files changed, 44 insertions(+), 87 deletions(-)

diff --git a/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java b/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
index 6227bd2..4d57f22 100644
--- a/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
+++ b/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
@@ -25,6 +25,8 @@ import org.apache.isis.config.beans.IsisBeanScanInterceptorForSpring;
 import org.apache.isis.config.beans.WebAppConfigBean;
 import org.apache.isis.extensions.fixtures.IsisBootFixtures;
 import org.apache.isis.extensions.secman.api.SecurityModuleConfig;
+import org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationService;
+import org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationServiceAllowBeatsVeto;
 import org.apache.isis.extensions.secman.encryption.jbcrypt.IsisBootSecmanEncryptionJbcrypt;
 import org.apache.isis.extensions.secman.jdo.IsisBootSecmanPersistenceJdo;
 import org.apache.isis.extensions.secman.model.IsisBootSecmanModel;
@@ -95,5 +97,11 @@ public class DemoAppManifest {
 	   return SecurityModuleConfig.builder()
 			   .build();
    }
+   
+   @Bean @Singleton
+   public PermissionsEvaluationService permissionsEvaluationService() {
+	   return new PermissionsEvaluationServiceAllowBeatsVeto();
+   }
+   
 
 }
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
index a9cae93..fcd6449 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
@@ -19,7 +19,6 @@
 package org.apache.isis.extensions.secman.api.permission;
 
 import java.io.Serializable;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -97,26 +96,21 @@ public class ApplicationPermissionValueSet implements Serializable {
     /**
      * Note that we require PermissionsEvaluationService to be serializable.
      */
-    private final PermissionsEvaluationService permissionsEvaluationService;
+    private PermissionsEvaluationService permissionsEvaluationService;
 
 
     // -- constructor
-    ApplicationPermissionValueSet(final ApplicationPermissionValue... permissionValues) {
-        this(Arrays.asList(permissionValues));
-    }
-    public ApplicationPermissionValueSet(final Iterable<ApplicationPermissionValue> permissionValues) {
-        this(permissionValues, null);
-    }
-    public ApplicationPermissionValueSet(final Iterable<ApplicationPermissionValue> permissionValues, final PermissionsEvaluationService permissionsEvaluationService) {
+    
+    public ApplicationPermissionValueSet(
+    		final List<ApplicationPermissionValue> permissionValues, 
+    		final PermissionsEvaluationService permissionsEvaluationService) {
+    	
         this.values = Collections.unmodifiableList(_Lists.newArrayList(permissionValues));
         for (final ApplicationPermissionValue permissionValue : permissionValues) {
             final ApplicationFeatureId featureId = permissionValue.getFeatureId();
             permissionsByFeature.putElement(featureId, permissionValue);
         }
-        this.permissionsEvaluationService =
-                permissionsEvaluationService != null
-                        ? permissionsEvaluationService
-                        : PermissionsEvaluationService.DEFAULT;
+        this.permissionsEvaluationService = permissionsEvaluationService;
     }
     
 
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
index 78824c2..2c84dd0 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
@@ -21,7 +21,6 @@ package org.apache.isis.extensions.secman.api.permission;
 import java.io.Serializable;
 import java.util.Collection;
 
-import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 
 /**
@@ -35,14 +34,11 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
  */
 public interface PermissionsEvaluationService extends Serializable {
 
-    PermissionsEvaluationService DEFAULT = new PermissionsEvaluationServiceAllowBeatsVeto ();
-
     /**
      * @param targetMemberId - the target (member) feature to be evaluated
      * @param mode - the mode required, ie {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode#VIEWING viewing} or {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode#CHANGING changing}.
      * @param permissionValues - permissions to evaluate, guaranteed to passed through in natural order, as per {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue.Comparators#natural()}.
      */
-    @Programmatic
     ApplicationPermissionValueSet.Evaluation evaluate(
             final ApplicationFeatureId targetMemberId,
             final ApplicationPermissionMode mode,
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
index 1743ffc..f077d73 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
@@ -20,22 +20,25 @@ package org.apache.isis.extensions.secman.api.permission;
 
 import java.util.Collection;
 
-import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
 
 public abstract class PermissionsEvaluationServiceAbstract implements PermissionsEvaluationService {
 
 	private static final long serialVersionUID = 1L;
 
-	@Programmatic
     @Override
     public ApplicationPermissionValueSet.Evaluation evaluate(
             final ApplicationFeatureId targetMemberId,
             final ApplicationPermissionMode mode,
             final Collection<ApplicationPermissionValue> permissionValues) {
 
-        final Iterable<ApplicationPermissionValue> ordered = ordered(permissionValues);
-
+    	if(_NullSafe.isEmpty(permissionValues)) {
+        	return null;
+        }
+    	
+        final Collection<ApplicationPermissionValue> ordered = ordered(permissionValues);
+        
         for (final ApplicationPermissionValue permissionValue : ordered) {
             if(permissionValue.implies(targetMemberId, mode)) {
                 return new ApplicationPermissionValueSet.Evaluation(permissionValue, true);
@@ -46,6 +49,7 @@ public abstract class PermissionsEvaluationServiceAbstract implements Permission
         return null;
     }
 
-    protected abstract Iterable<ApplicationPermissionValue> ordered(Collection<ApplicationPermissionValue> permissionValues);
+    protected abstract Collection<ApplicationPermissionValue> ordered(
+    		Collection<ApplicationPermissionValue> permissionValues);
 
 }
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
index a84c555..e6b2e05 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
@@ -39,8 +39,9 @@ public class PermissionsEvaluationServiceAllowBeatsVeto extends PermissionsEvalu
      * </p>
      */
     @Override
-    protected Iterable<ApplicationPermissionValue> ordered(
+    protected Collection<ApplicationPermissionValue> ordered(
             final Collection<ApplicationPermissionValue> permissionValues) {
+    	
         return permissionValues;
     }
 
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
index f22cf5e..def3b0e 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
@@ -18,12 +18,13 @@
  */
 package org.apache.isis.extensions.secman.api.permission;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
 import org.apache.isis.commons.internal.collections._Lists;
 
+import lombok.val;
+
 /**
  * An implementation whereby a VETO permission for a feature overrides an ALLOW (for same scope).
  */
@@ -43,8 +44,10 @@ public class PermissionsEvaluationServiceVetoBeatsAllow extends PermissionsEvalu
      * </p>
      */
     @Override
-    protected Iterable<ApplicationPermissionValue> ordered(final Collection<ApplicationPermissionValue> permissionValues) {
-        final ArrayList<ApplicationPermissionValue> reversed = _Lists.newArrayList(permissionValues);
+    protected Collection<ApplicationPermissionValue> ordered(
+    		final Collection<ApplicationPermissionValue> permissionValues) {
+    	
+        val reversed = _Lists.<ApplicationPermissionValue>newArrayList(permissionValues);
         Collections.reverse(reversed);
         return reversed;
     }
diff --git a/extensions/secman/encryption-jbcrypt/pom.xml b/extensions/secman/encryption-jbcrypt/pom.xml
index d0bec69..bc18294 100644
--- a/extensions/secman/encryption-jbcrypt/pom.xml
+++ b/extensions/secman/encryption-jbcrypt/pom.xml
@@ -57,7 +57,6 @@
             <groupId>org.mindrot</groupId>
             <artifactId>jbcrypt</artifactId>
             <version>${jbcrypt.version}</version>
-            <scope>provided</scope>
         </dependency>
 
     </dependencies>
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
index cb03ea4..c1e56c3 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
@@ -20,80 +20,32 @@ package org.apache.isis.extensions.secman.jdo.seed;
 
 import javax.annotation.PostConstruct;
 import javax.inject.Inject;
+import javax.inject.Singleton;
 
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.extensions.fixtures.legacy.fixturescripts.FixtureScripts;
-import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUserRepository;
 import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.session.IsisSession;
-import org.apache.isis.runtime.system.session.IsisSessionFactory;
-import org.apache.isis.security.authentication.AuthenticationSession;
-import org.springframework.core.annotation.Order;
+import org.springframework.transaction.TransactionStatus;
 
-@DomainService(
-        nature = NatureOfService.DOMAIN
-)
-@Order(-1000)
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@Singleton @Log4j2
 public class SeedSecurityModuleService {
 
     @Inject FixtureScripts fixtureScripts;
     
     @PostConstruct
     public void init() {
+    	
+    	log.info("SEED");
        
-     // fixtureScripts.runFixtureScript(new SeedUsersAndRolesFixtureScript(), null);
-        
-        IsisContext.getAuthenticationSession()
-        .ifPresent(authenticationSession->{
-        	System.out.println("!!! authenticationSession " + authenticationSession);
-        	
-        	IsisContext.compute(()->run(authenticationSession));
-        	
-        });
-        
-    }
-    
-    private String run(AuthenticationSession authenticationSession) {
-        
-        System.out.println("!!! wait for SeedSecurityModule to start");
-        
-        try {
-            
-            Thread.sleep(5000);
-            
-            System.out.println("!!! SeedSecurityModule starting");
-            
-            final IsisSessionFactory sf = IsisContext.getSessionFactory();
-            IsisSession session = sf.openSession(authenticationSession);
-            
+    	val txTemplate = IsisContext.createTransactionTemplate();
+    	
+    	txTemplate.execute((TransactionStatus status) -> {
             fixtureScripts.runFixtureScript(new SeedUsersAndRolesFixtureScript(), null);
-            
-            session.getCurrentTransaction().flush();
-            
-            
-        } catch (Exception e) {
-            e.printStackTrace();
-            
-            return "FAILED";
-        }
-
-        //verify
-        
-        final ApplicationUserRepository applicationUserRepository = 
-                IsisContext.getServiceRegistry()
-                .lookupServiceElseFail(ApplicationUserRepository.class);
-        
-        _NullSafe.stream(applicationUserRepository.allUsers())
-        .forEach(user->{
-            System.out.println("!!! user: " + user + " : " + user.getEncryptedPassword());    
+            return null;
         });
         
-        System.out.println("!!! SeedSecurityModule done");
-        
-        return "OK";
-        
     }