Refactoring library to be properly used as provider in Smartgears
This commit is contained in:
parent
a66c1da525
commit
261e8733b2
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<SecretManager> instance = new InheritableThreadLocal<SecretManager>() {
|
||||
|
||||
@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<Secret> secrets) throws Exception {
|
||||
if(currentSecretHolder!=initialSecretHolder) {
|
||||
|
||||
public synchronized void startSession(Collection<Secret> 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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue