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

[isis] branch ISIS-2727 updated (795b410 -> 2cd342c)

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

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


    from 795b410  ISIS-2727: adds InteractionContext as parameter to InteractionFactory#openInteraction(Authentication)
     new 277fc2d  ISIS-2727: just renames a var in SudoService
     new ba5633d  ISIS-2727: adds a general purpose attributes to InteractionContext
     new 7408f7e  ISIS-2727: AuthenticationAbstract now saves a reference to itself in InteractionContext#attributes map
     new 9d32f84  ISIS-2727: adds static method to lookup an Authentication from an InteractionContext
     new ad179f7  ISIS-2727: stores InteractionContext directly within InteractionLayer
     new 1a245c6  ISIS-2727: refactors InteractionLayer
     new 4c14c46  ISIS-2727: removes Authentication param from InteractionFactory#openInteraction
     new 710d49b  ISIS-2727: fixes error in InteractionFactoryDefault#openInteraction, in determining the whether to reuse the current layer
     new 2cd342c  ISIS-2727: removes Authentication from InteractionLayer

The 9 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:
 .../applib/services/iactn/InteractionProvider.java |  6 ++++
 .../services/iactnlayer/InteractionContext.java    | 38 ++++++++++++++++++++++
 .../interaction/integration/IsisRequestCycle.java  |  2 +-
 .../interaction/session/InteractionFactory.java    |  5 +--
 .../core/interaction/session/InteractionLayer.java | 17 +++-------
 .../interaction/session/InteractionTracker.java    | 14 +++++++-
 ...usSession.java => AnonymousAuthentication.java} |  4 +--
 .../session/InteractionFactoryDefault.java         | 19 +++++------
 .../runtimeservices/sudo/SudoServiceDefault.java   | 20 +++++++-----
 .../wrapper/WrapperFactoryDefault.java             |  7 +++-
 .../security/authentication/Authentication.java    | 21 ++++++++++++
 .../authentication/AuthenticationAbstract.java     |  6 +++-
 .../standard/SimpleAuthentication.java             |  5 +++
 .../ui/auth/VaadinAuthenticationHandler.java       |  2 +-
 14 files changed, 125 insertions(+), 41 deletions(-)
 rename core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/{AnonymousSession.java => AnonymousAuthentication.java} (92%)

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

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

[isis] 02/09: ISIS-2727: adds a general purpose attributes to InteractionContext

Posted by da...@apache.org.
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 ba5633df8252c05c66f462467e6375ad330b9a67
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:19:38 2021 +0100

    ISIS-2727: adds a general purpose attributes to InteractionContext
    
    my thinking being that we can attach an Authentication to InteractionContext, rather than vice versa
---
 .../services/iactnlayer/InteractionContext.java    | 38 ++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/iactnlayer/InteractionContext.java b/api/applib/src/main/java/org/apache/isis/applib/services/iactnlayer/InteractionContext.java
index 334d6c4..f27b3f5 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/iactnlayer/InteractionContext.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/iactnlayer/InteractionContext.java
@@ -19,12 +19,17 @@
 package org.apache.isis.applib.services.iactnlayer;
 
 import java.io.Serializable;
+import java.util.HashMap;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.TimeZone;
 
 import org.apache.isis.applib.clock.VirtualClock;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.user.UserMemento;
+import org.apache.isis.commons.internal.base._Casts;
 
 import lombok.Builder;
 import lombok.Getter;
@@ -70,6 +75,38 @@ public class InteractionContext implements Serializable {
     @With @Getter @Builder.Default
     @NonNull TimeZone timeZone = TimeZone.getDefault();
 
+    Map<String, Serializable> attributes = new HashMap<>();
+    public void putAttribute(String key, Serializable value) {
+        attributes.put(key, value);
+    }
+
+    public <T> Optional<T> getAttribute(String key, Class<T> castTo) {
+        return _Casts.castTo(attributes.get(key), castTo);
+    }
+
+
+    // -- EQUALS and HASHCODE
+
+    /**
+     * We exclude {@link #attributes}.
+     */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        InteractionContext that = (InteractionContext) o;
+        return user.equals(that.user) && clock.equals(that.clock) && locale.equals(that.locale) && timeZone.equals(that.timeZone);
+    }
+
+    /**
+     * We exclude {@link #attributes}.
+     */
+    @Override
+    public int hashCode() {
+        return Objects.hash(user, clock, locale, timeZone);
+    }
+
+
     // -- FACTORIES
 
     /**
@@ -86,4 +123,5 @@ public class InteractionContext implements Serializable {
                 .build();
     }
 
+
 }

[isis] 01/09: ISIS-2727: just renames a var in SudoService

Posted by da...@apache.org.
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 277fc2d6c8e1209a023a87e61792bc182754e388
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:11:47 2021 +0100

    ISIS-2727: just renames a var in SudoService
---
 .../isis/core/runtimeservices/sudo/SudoServiceDefault.java | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

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 2ca9d9d..8fe1a86 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
@@ -73,19 +73,19 @@ public class SudoServiceDefault implements SudoService {
             final @NonNull Callable<T> callable) {
 
         val currentInteractionLayer = interactionTracker.currentInteractionLayerElseFail();
-        val currentExecutionContext = currentInteractionLayer.getInteractionContext();
-        val sudoExecutionContext = sudoMapper.apply(currentExecutionContext);
+        val currentInteractionContext = currentInteractionLayer.getInteractionContext();
+        val sudoInteractionContext = sudoMapper.apply(currentInteractionContext);
 
-        val sodoSession = currentInteractionLayer
+        val sudoAuthentication = currentInteractionLayer
                 .getAuthentication()
-                .withInteractionContext(sudoExecutionContext);
+                .withInteractionContext(sudoInteractionContext);
 
         try {
-            beforeCall(currentExecutionContext, sudoExecutionContext);
+            beforeCall(currentInteractionContext, sudoInteractionContext);
 
-            return interactionFactory.callAuthenticated(sodoSession, callable);
+            return interactionFactory.callAuthenticated(sudoAuthentication, callable);
         } finally {
-            afterCall(sudoExecutionContext, currentExecutionContext);
+            afterCall(sudoInteractionContext, currentInteractionContext);
         }
     }
 

[isis] 07/09: ISIS-2727: removes Authentication param from InteractionFactory#openInteraction

Posted by da...@apache.org.
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 4c14c462fd9ef1fbfa9aa12155736d6b7aae45f5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:33:23 2021 +0100

    ISIS-2727: removes Authentication param from InteractionFactory#openInteraction
---
 .../isis/core/interaction/integration/IsisRequestCycle.java      | 2 +-
 .../apache/isis/core/interaction/session/InteractionFactory.java | 5 +----
 .../apache/isis/core/interaction/session/InteractionLayer.java   | 1 -
 .../core/runtimeservices/session/InteractionFactoryDefault.java  | 9 ++++-----
 .../viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java       | 2 +-
 5 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java
index 532ac89..fffb69b 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java
@@ -47,7 +47,7 @@ public class IsisRequestCycle {
                         authentication.getValidationCode()))
                 .orElse(authentication);
 
-        isisInteractionFactory.openInteraction(authenticationToUse, authenticationToUse.getInteractionContext());
+        isisInteractionFactory.openInteraction(authenticationToUse.getInteractionContext());
     }
 
     public void onRequestHandlerExecuted() {
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
index fa883e3..e3b3221 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
@@ -47,7 +47,7 @@ extends AnonymousInteractionFactory {
      * If present, reuses the current top level {@link InteractionLayer}, otherwise creates a new
      * anonymous one.
      *
-     * @see #openInteraction(Authentication, InteractionContext)
+     * @see #openInteraction(InteractionContext)
      */
     InteractionLayer openInteraction();
 
@@ -60,8 +60,6 @@ extends AnonymousInteractionFactory {
      * The {@link InteractionLayer} represents a user's span of activities interacting with
      * the application. The session's stack is later closed using {@link #closeInteractionLayers()}.
      *
-     * @param authentication - the {@link Authentication} to associate with the new top of
-     * the stack (non-null)
      * @param interactionContext
      *
      * @apiNote if the current {@link InteractionLayer} (if any) has an {@link Authentication} that
@@ -69,7 +67,6 @@ extends AnonymousInteractionFactory {
      * instead the current one is returned
      */
     InteractionLayer openInteraction(
-            @NonNull Authentication authentication,
             @NonNull InteractionContext interactionContext);
 
     /**
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 7b6a2c5..835ac86 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
@@ -43,7 +43,6 @@ public class InteractionLayer {
 
 	public InteractionLayer(
 			final @NonNull IsisInteraction interaction,
-			final @NonNull Authentication authentication,
 			final @NonNull InteractionContext interactionContext) {
 
 		// current thread's Interaction which this layer belongs to,
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 89f0293..3bbf788 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
@@ -161,13 +161,12 @@ implements
                 // or else create an anonymous authentication layer
                 .orElseGet(()-> {
                     final AnonymousSession authToUse = new AnonymousSession();
-                    return openInteraction(authToUse, authToUse.getInteractionContext());
+                    return openInteraction(authToUse.getInteractionContext());
                 });
     }
 
     @Override
     public InteractionLayer openInteraction(
-            final @NonNull Authentication authToUse,
             final @NonNull InteractionContext interactionContextToUse) {
 
         val isisInteraction = getOrCreateIsisInteraction();
@@ -184,7 +183,7 @@ implements
             return interactionLayerStack.get().peek();
         }
 
-        val interactionLayer = new InteractionLayer(isisInteraction, authToUse, interactionContextToUse);
+        val interactionLayer = new InteractionLayer(isisInteraction, interactionContextToUse);
 
         interactionLayerStack.get().push(interactionLayer);
 
@@ -245,7 +244,7 @@ implements
             @NonNull final Callable<R> callable) {
 
         final int stackSizeWhenEntering = interactionLayerStack.get().size();
-        openInteraction(authentication, authentication.getInteractionContext());
+        openInteraction(authentication.getInteractionContext());
 
         try {
             serviceInjector.injectServicesInto(callable);
@@ -263,7 +262,7 @@ implements
             @NonNull final ThrowingRunnable runnable) {
 
         final int stackSizeWhenEntering = interactionLayerStack.get().size();
-        openInteraction(authentication, authentication.getInteractionContext());
+        openInteraction(authentication.getInteractionContext());
 
         try {
             serviceInjector.injectServicesInto(runnable);
diff --git a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
index d942201..561b1f0 100644
--- a/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
+++ b/incubator/viewers/vaadin/ui/src/main/java/org/apache/isis/incubator/viewer/vaadin/ui/auth/VaadinAuthenticationHandler.java
@@ -121,7 +121,7 @@ implements
 
         val authentication = AuthSessionStoreUtil.get().orElse(null);
         if(authentication!=null) {
-            isisInteractionFactory.openInteraction(authentication, authentication.getInteractionContext());
+            isisInteractionFactory.openInteraction(authentication.getInteractionContext());
             return; // access granted
         }
         // otherwise redirect to login page

[isis] 06/09: ISIS-2727: refactors InteractionLayer

Posted by da...@apache.org.
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 1a245c631b5ce0789fac53bacc083664bc624a7c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:31:46 2021 +0100

    ISIS-2727: refactors InteractionLayer
    
    ... now derive Authentication from the provided InteractionContext
---
 .../isis/core/interaction/session/InteractionLayer.java     | 13 +++++--------
 1 file changed, 5 insertions(+), 8 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 ba5d76b..7b6a2c5 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
@@ -35,10 +35,10 @@ import lombok.NonNull;
 public class InteractionLayer {
 
 	@Getter private final IsisInteraction interaction;
-	 private final Authentication authentication;
+	@Getter private final InteractionContext interactionContext;
 
 	public Authentication getAuthentication() {
-		return authentication;
+		return Authentication.authenticationFrom(interactionContext).orElse(null);
 	}
 
 	public InteractionLayer(
@@ -50,12 +50,9 @@ public class InteractionLayer {
 		// meaning the Interaction that holds the stack containing this layer
 		this.interaction = interaction;
 
-		// binds given authentication to this layer
-		this.authentication = authentication;
-	}
-
-	public InteractionContext getInteractionContext() {
-	    return authentication.getInteractionContext();
+		// binds given interaction context (which normally would hold the Authentication in its attribute map)
+		// to this layer
+		this.interactionContext = interactionContext;
 	}
 
 }

[isis] 04/09: ISIS-2727: adds static method to lookup an Authentication from an InteractionContext

Posted by da...@apache.org.
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 9d32f843e5a200298aac0f116495ab45f247d484
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:26:28 2021 +0100

    ISIS-2727: adds static method to lookup an Authentication from an InteractionContext
---
 .../security/authentication/Authentication.java     | 21 +++++++++++++++++++++
 .../authentication/AuthenticationAbstract.java      |  6 ++++--
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/Authentication.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/Authentication.java
index 0408fd2..4828e0c 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/Authentication.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/Authentication.java
@@ -20,11 +20,14 @@
 package org.apache.isis.core.security.authentication;
 
 import java.io.Serializable;
+import java.util.Optional;
 
 import org.apache.isis.applib.services.iactnlayer.InteractionContext;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.user.UserMemento;
 
+import lombok.NonNull;
+
 /**
  * An immutable, serializable value type, that holds details about a user's authentication.
  *
@@ -39,6 +42,8 @@ import org.apache.isis.applib.services.user.UserMemento;
  */
 public interface Authentication extends Serializable {
 
+    String INTERACTION_CONTEXT_KEY = Authentication.class.getName();
+
     /**
      * The name of the authenticated user; for display purposes only.
      */
@@ -100,4 +105,20 @@ public interface Authentication extends Serializable {
      * @param interactionContext
      */
     Authentication withInteractionContext(InteractionContext interactionContext);
+
+    /**
+     * Looks up an {@link Authentication} from the provided {@link InteractionContext}.
+     *
+     * <p>
+     *     If the {@link InteractionContext} was created as the result of an authentication process (as opposed to
+     *     programmatically) then there will be an attached {@link Authentication} object.
+     * </p>
+     *
+     * @param interactionContext
+     * @return
+     */
+    public static Optional<Authentication> authenticationFrom(final @NonNull InteractionContext interactionContext) {
+        return interactionContext.getAttribute(INTERACTION_CONTEXT_KEY, Authentication.class);
+    }
+
 }
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java
index 6bba6fd..449b98e 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java
@@ -20,6 +20,7 @@ package org.apache.isis.core.security.authentication;
 
 import java.io.Serializable;
 import java.util.Objects;
+import java.util.Optional;
 
 import org.apache.isis.applib.services.iactnlayer.InteractionContext;
 import org.apache.isis.applib.util.ToString;
@@ -29,7 +30,7 @@ import lombok.Getter;
 import lombok.NonNull;
 
 public abstract class AuthenticationAbstract
-implements Authentication, Serializable {
+implements Authentication {
 
     private static final long serialVersionUID = 1L;
 
@@ -50,11 +51,12 @@ implements Authentication, Serializable {
             final @NonNull String validationCode) {
 
         this.interactionContext = interactionContext;
-        this.interactionContext.putAttribute(this.getClass().getName(), this);
+        this.interactionContext.putAttribute(INTERACTION_CONTEXT_KEY, this);
 
         this.validationCode = validationCode;
     }
 
+
     // -- WITHERS
 
     /**

[isis] 03/09: ISIS-2727: AuthenticationAbstract now saves a reference to itself in InteractionContext#attributes map

Posted by da...@apache.org.
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 7408f7e9bc8480c2d187b4dbea705d1870d94021
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:21:00 2021 +0100

    ISIS-2727: AuthenticationAbstract now saves a reference to itself in InteractionContext#attributes map
---
 .../isis/core/security/authentication/AuthenticationAbstract.java       | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java
index 85a8d02..6bba6fd 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationAbstract.java
@@ -50,6 +50,8 @@ implements Authentication, Serializable {
             final @NonNull String validationCode) {
 
         this.interactionContext = interactionContext;
+        this.interactionContext.putAttribute(this.getClass().getName(), this);
+
         this.validationCode = validationCode;
     }
 

[isis] 05/09: ISIS-2727: stores InteractionContext directly within InteractionLayer

Posted by da...@apache.org.
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 ad179f7afb1ad8e95263bebbb2a4e3aac71e03bf
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:28:43 2021 +0100

    ISIS-2727: stores InteractionContext directly within InteractionLayer
    
    ... on the way to removing authToUse from InteractionLayer
---
 .../org/apache/isis/core/interaction/session/InteractionLayer.java     | 3 ++-
 .../isis/core/runtimeservices/session/InteractionFactoryDefault.java   | 2 +-
 2 files changed, 3 insertions(+), 2 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 4c1d706..ba5d76b 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
@@ -43,7 +43,8 @@ public class InteractionLayer {
 
 	public InteractionLayer(
 			final @NonNull IsisInteraction interaction,
-			final @NonNull Authentication authentication) {
+			final @NonNull Authentication authentication,
+			final @NonNull InteractionContext interactionContext) {
 
 		// current thread's Interaction which this layer belongs to,
 		// meaning the Interaction that holds the stack containing this layer
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 f767f3f..89f0293 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
@@ -184,7 +184,7 @@ implements
             return interactionLayerStack.get().peek();
         }
 
-        val interactionLayer = new InteractionLayer(isisInteraction, authToUse);
+        val interactionLayer = new InteractionLayer(isisInteraction, authToUse, interactionContextToUse);
 
         interactionLayerStack.get().push(interactionLayer);
 

[isis] 08/09: ISIS-2727: fixes error in InteractionFactoryDefault#openInteraction, in determining the whether to reuse the current layer

Posted by da...@apache.org.
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 710d49b091aec9d9521ae420d12a8c7a42be8bbe
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 12:37:25 2021 +0100

    ISIS-2727: fixes error in InteractionFactoryDefault#openInteraction, in determining the whether to reuse the current layer
---
 .../apache/isis/applib/services/iactn/InteractionProvider.java |  6 ++++++
 .../isis/core/interaction/session/InteractionTracker.java      | 10 ++++++++++
 .../runtimeservices/session/InteractionFactoryDefault.java     |  4 ++--
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/InteractionProvider.java b/api/applib/src/main/java/org/apache/isis/applib/services/iactn/InteractionProvider.java
index e43a5f5..52cafc7 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/iactn/InteractionProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/iactn/InteractionProvider.java
@@ -21,6 +21,7 @@ package org.apache.isis.applib.services.iactn;
 import java.util.Optional;
 import java.util.UUID;
 
+import org.apache.isis.applib.services.iactnlayer.InteractionContext;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 
 /**
@@ -51,6 +52,11 @@ public interface InteractionProvider {
     Optional<Interaction> currentInteraction();
 
     /**
+     * Optionally, the currently active {@link org.apache.isis.applib.services.iactnlayer.InteractionContext} for the calling thread.
+     */
+    Optional<InteractionContext> currentInteractionContext();
+
+    /**
      * Unique id of the current request- or test-scoped {@link Interaction}.
      */
     Optional<UUID> getInteractionId();
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 89c0bef..c4f0fee 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
@@ -61,6 +61,16 @@ extends InteractionProvider, AuthenticationProvider {
         return currentInteractionLayer().map(InteractionLayer::getAuthentication);
     }
 
+    // -- INTERACTION CONTEXT
+
+    /**
+     * Returns the {@link InteractionContext} wrapped by the {@link #currentInteractionLayer()} (if within an interaction layer).
+     */
+    @Override
+    default Optional<InteractionContext> currentInteractionContext() {
+        return currentInteractionLayer().map(InteractionLayer::getInteractionContext);
+    }
+
 
     // -- INTERACTION
 
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 3bbf788..28a8fe3 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
@@ -174,8 +174,8 @@ implements
         // check whether we should reuse any current authenticationLayer,
         // that is, if current authentication and authToUse are equal
 
-        val reuseCurrentLayer = currentInteraction()
-                .map(currentInteraction -> Objects.equals(currentInteraction, interactionContextToUse))
+        val reuseCurrentLayer = currentInteractionContext()
+                .map(currentInteractionContext -> Objects.equals(currentInteractionContext, interactionContextToUse))
                 .orElse(false);
 
         if(reuseCurrentLayer) {