diff --git a/src/main/java/org/gcube/common/authorization/utils/manager/SecretHolder.java b/src/main/java/org/gcube/common/authorization/utils/manager/SecretHolder.java index 7f4a2c8..bdf9ae5 100644 --- a/src/main/java/org/gcube/common/authorization/utils/manager/SecretHolder.java +++ b/src/main/java/org/gcube/common/authorization/utils/manager/SecretHolder.java @@ -85,13 +85,22 @@ public class SecretHolder { } public void reset() { + boolean first = true; for(Secret secret : secrets) { try { - secret.reset(); + if(first) { + secret.reset(); + first = false; + }else { + secret.resetToken(); + } }catch (Exception e) { // trying the next one } } + if(first) { + ScopeProvider.instance.reset(); + } } } diff --git a/src/main/java/org/gcube/common/authorization/utils/manager/SecretManager.java b/src/main/java/org/gcube/common/authorization/utils/manager/SecretManager.java index e0497f4..aeb76be 100644 --- a/src/main/java/org/gcube/common/authorization/utils/manager/SecretManager.java +++ b/src/main/java/org/gcube/common/authorization/utils/manager/SecretManager.java @@ -1,7 +1,8 @@ package org.gcube.common.authorization.utils.manager; -import java.util.SortedSet; +import java.util.Collection; +import org.gcube.common.authorization.utils.provider.SecretProvider; import org.gcube.common.authorization.utils.secret.Secret; import org.gcube.common.authorization.utils.user.User; @@ -9,7 +10,7 @@ import org.gcube.common.authorization.utils.user.User; * @author Luca Frosini (ISTI - CNR) */ public class SecretManager { - + public static final InheritableThreadLocal instance = new InheritableThreadLocal() { @Override @@ -21,30 +22,38 @@ public class SecretManager { private SecretHolder initialSecretHolder; private SecretHolder currentSecretHolder; - - private SecretManager(){ + + private SecretManager() { initialSecretHolder = new SecretHolder(); currentSecretHolder = initialSecretHolder; } - - public synchronized void addSecret(Secret secret) throws Exception { - if(currentSecretHolder!=initialSecretHolder) { - throw new Exception("You can't add a Secret in a session. You must terminate the session first."); + + public synchronized void addSecretViaProvider(SecretProvider secretProvider) { + if (currentSecretHolder != initialSecretHolder) { + throw new RuntimeException("You can't add a Secret in a session. You must terminate the session first."); } - initialSecretHolder.addSecret(secret); + Secret secret = secretProvider.getSecret(); + currentSecretHolder.addSecret(secret); } - + + public synchronized void addSecret(Secret secret) { + if (currentSecretHolder != initialSecretHolder) { + throw new RuntimeException("You can't add a Secret in a session. You must terminate the session first."); + } + currentSecretHolder.addSecret(secret); + } + public synchronized void startSession(Secret secret) throws Exception { - if(currentSecretHolder!=initialSecretHolder) { + if (currentSecretHolder != initialSecretHolder) { throw new Exception("You are already in a session. You must terminate the session first."); } initialSecretHolder.reset(); currentSecretHolder = new SecretHolder(secret); currentSecretHolder.set(); } - - public synchronized void startSession(SortedSet secrets) throws Exception { - if(currentSecretHolder!=initialSecretHolder) { + + public synchronized void startSession(Collection secrets) throws Exception { + if (currentSecretHolder != initialSecretHolder) { throw new Exception("You are already in a session. You must terminate the session first."); } initialSecretHolder.reset(); @@ -52,17 +61,33 @@ public class SecretManager { currentSecretHolder.set(); } + public synchronized void startSession(SecretHolder secretHolder) throws Exception { + if (currentSecretHolder != initialSecretHolder) { + throw new Exception("You are already in a session. You must terminate the session first."); + } + initialSecretHolder.reset(); + currentSecretHolder = secretHolder; + currentSecretHolder.set(); + } + public synchronized void endSession() throws Exception { - if(currentSecretHolder!=initialSecretHolder) { + if (currentSecretHolder != initialSecretHolder) { currentSecretHolder.reset(); initialSecretHolder.set(); currentSecretHolder = initialSecretHolder; } } + public synchronized void set() throws Exception { + if (currentSecretHolder != initialSecretHolder) { + throw new Exception("You are in a session. You must terminate the session first."); + } + currentSecretHolder.set(); + } + public synchronized void reset() { initialSecretHolder.reset(); - if(initialSecretHolder!=currentSecretHolder) { + if (initialSecretHolder != currentSecretHolder) { currentSecretHolder.reset(); } instance.remove(); @@ -71,8 +96,8 @@ public class SecretManager { public synchronized String getContext() { return currentSecretHolder.getContext(); } - - public synchronized User getUser() { + + public synchronized User getIdentity() { return currentSecretHolder.getUser(); } diff --git a/src/main/java/org/gcube/common/authorization/utils/provider/GCubeSecretProvider.java b/src/main/java/org/gcube/common/authorization/utils/provider/GCubeSecretProvider.java deleted file mode 100644 index 27e97f8..0000000 --- a/src/main/java/org/gcube/common/authorization/utils/provider/GCubeSecretProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.gcube.common.authorization.utils.provider; - -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; -import org.gcube.common.authorization.utils.secret.Secret; -import org.gcube.common.authorization.utils.secret.GCubeSecret; - -/** - * @author Luca Frosini (ISTI - CNR) - */ -public class GCubeSecretProvider implements SecretProvider { - - @Override - public Secret getSecret() { - String token = SecurityTokenProvider.instance.get(); - if(token!=null) { - return new GCubeSecret(token); - } - return null; - } - -} diff --git a/src/main/java/org/gcube/common/authorization/utils/provider/JWTSecretProvider.java b/src/main/java/org/gcube/common/authorization/utils/provider/JWTSecretProvider.java deleted file mode 100644 index bf9fd85..0000000 --- a/src/main/java/org/gcube/common/authorization/utils/provider/JWTSecretProvider.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.gcube.common.authorization.utils.provider; - -import org.gcube.common.authorization.library.provider.AccessTokenProvider; -import org.gcube.common.authorization.utils.secret.Secret; -import org.gcube.common.authorization.utils.secret.JWTSecret; - -/** - * @author Luca Frosini (ISTI - CNR) - */ -public class JWTSecretProvider implements SecretProvider { - - @Override - public Secret getSecret() { - String token = AccessTokenProvider.instance.get(); - if(token!=null) { - return new JWTSecret(token); - } - return null; - } - -}