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) {