You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/09 12:43:25 UTC

[isis] 09/09: ISIS-2727: removes Authentication from InteractionLayer

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

danhaywood pushed a commit to branch ISIS-2727
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 2cd342c6d68b61de09bf55067384e46c434b408d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 13:42:54 2021 +0100

    ISIS-2727: removes Authentication from InteractionLayer
---
 .../apache/isis/core/interaction/session/InteractionLayer.java |  4 ----
 .../isis/core/interaction/session/InteractionTracker.java      |  4 +++-
 .../{AnonymousSession.java => AnonymousAuthentication.java}    |  4 ++--
 .../runtimeservices/session/InteractionFactoryDefault.java     |  6 +++---
 .../isis/core/runtimeservices/sudo/SudoServiceDefault.java     | 10 +++++++---
 .../core/runtimeservices/wrapper/WrapperFactoryDefault.java    |  7 ++++++-
 .../security/authentication/standard/SimpleAuthentication.java |  5 +++++
 7 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionLayer.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionLayer.java
index 835ac86..94443ae 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionLayer.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionLayer.java
@@ -37,10 +37,6 @@ public class InteractionLayer {
 	@Getter private final IsisInteraction interaction;
 	@Getter private final InteractionContext interactionContext;
 
-	public Authentication getAuthentication() {
-		return Authentication.authenticationFrom(interactionContext).orElse(null);
-	}
-
 	public InteractionLayer(
 			final @NonNull IsisInteraction interaction,
 			final @NonNull InteractionContext interactionContext) {
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java
index c4f0fee..83d73ad 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java
@@ -58,7 +58,9 @@ extends InteractionProvider, AuthenticationProvider {
      */
     @Override
     default Optional<Authentication> currentAuthentication() {
-        return currentInteractionLayer().map(InteractionLayer::getAuthentication);
+        return currentInteractionLayer()
+                .map(InteractionLayer::getInteractionContext)
+                .flatMap(Authentication::authenticationFrom);
     }
 
     // -- INTERACTION CONTEXT
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/AnonymousSession.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/AnonymousAuthentication.java
similarity index 92%
rename from core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/AnonymousSession.java
rename to core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/AnonymousAuthentication.java
index 6216da1..ee55816 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/AnonymousSession.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/AnonymousAuthentication.java
@@ -22,14 +22,14 @@ import org.apache.isis.applib.services.iactnlayer.InteractionContext;
 import org.apache.isis.applib.services.user.UserMemento;
 import org.apache.isis.core.security.authentication.AuthenticationAbstract;
 
-final class AnonymousSession extends AuthenticationAbstract {
+public final class AnonymousAuthentication extends AuthenticationAbstract {
 
     private static final long serialVersionUID = 1L;
 
     private static final InteractionContext INITIALISATION_CONTEXT =
             InteractionContext.ofUserWithSystemDefaults(UserMemento.system());
 
-    public AnonymousSession() {
+    public AnonymousAuthentication() {
         super(INITIALISATION_CONTEXT, AuthenticationAbstract.DEFAULT_AUTH_VALID_CODE);
     }
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java
index 28a8fe3..3787072 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java
@@ -160,7 +160,7 @@ implements
         return currentInteractionLayer()
                 // or else create an anonymous authentication layer
                 .orElseGet(()-> {
-                    final AnonymousSession authToUse = new AnonymousSession();
+                    final AnonymousAuthentication authToUse = new AnonymousAuthentication();
                     return openInteraction(authToUse.getInteractionContext());
                 });
     }
@@ -282,7 +282,7 @@ implements
             serviceInjector.injectServicesInto(callable);
             return callable.call(); // reuse existing session
         }
-        return callAuthenticated(new AnonymousSession(), callable);
+        return callAuthenticated(new AnonymousAuthentication(), callable);
     }
 
     /**
@@ -297,7 +297,7 @@ implements
             runnable.run(); // reuse existing session
             return;
         }
-        runAuthenticated(new AnonymousSession(), runnable);
+        runAuthenticated(new AnonymousAuthentication(), runnable);
     }
 
     // -- CONVERSATION ID
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sudo/SudoServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sudo/SudoServiceDefault.java
index 8fe1a86..bf02c91 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sudo/SudoServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/sudo/SudoServiceDefault.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.runtimeservices.sudo;
 
+import java.util.Optional;
 import java.util.concurrent.Callable;
 import java.util.function.UnaryOperator;
 
@@ -38,6 +39,9 @@ import org.apache.isis.applib.services.sudo.SudoServiceListener;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.interaction.session.InteractionFactory;
 import org.apache.isis.core.interaction.session.InteractionTracker;
+import org.apache.isis.core.runtimeservices.session.AnonymousAuthentication;
+import org.apache.isis.core.security.authentication.Authentication;
+import org.apache.isis.core.security.authentication.standard.SimpleAuthentication;
 
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
@@ -76,9 +80,9 @@ public class SudoServiceDefault implements SudoService {
         val currentInteractionContext = currentInteractionLayer.getInteractionContext();
         val sudoInteractionContext = sudoMapper.apply(currentInteractionContext);
 
-        val sudoAuthentication = currentInteractionLayer
-                .getAuthentication()
-                .withInteractionContext(sudoInteractionContext);
+        val authentication = Authentication.authenticationFrom(currentInteractionContext)
+                                .orElse(SimpleAuthentication.validOf(currentInteractionContext));
+        val sudoAuthentication = authentication.withInteractionContext(sudoInteractionContext);
 
         try {
             beforeCall(currentInteractionContext, sudoInteractionContext);
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
index 1b8edc9..564ac22 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/wrapper/WrapperFactoryDefault.java
@@ -361,7 +361,12 @@ public class WrapperFactoryDefault implements WrapperFactory {
         val interactionContext = interactionLayer.getInteractionContext();
         val asyncInteractionContext = interactionContextFrom(asyncControl, interactionContext);
 
-        val auth = interactionLayer.getAuthentication();
+        val authIfAny = Authentication.authenticationFrom(interactionLayer.getInteractionContext());
+        if(authIfAny.isEmpty()) {
+            return null;
+        }
+
+        val auth = authIfAny.get();
         val asyncAuth = auth.withInteractionContext(asyncInteractionContext);
 
         val command = interactionProviderProvider.get().currentInteractionElseFail().getCommand();
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/standard/SimpleAuthentication.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/standard/SimpleAuthentication.java
index 505270f..887f9ad 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/standard/SimpleAuthentication.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/standard/SimpleAuthentication.java
@@ -45,6 +45,11 @@ extends AuthenticationAbstract {
         return of(user, DEFAULT_AUTH_VALID_CODE);
     }
 
+    public static SimpleAuthentication validOf(
+            final @NonNull InteractionContext interactionContext) {
+        return new SimpleAuthentication(interactionContext, DEFAULT_AUTH_VALID_CODE);
+    }
+
     // -- CONSTRUCTOR
 
     public SimpleAuthentication(