authorization-utils/src/main/java/org/gcube/common/authorization/utils/manager/SecretManager.java

81 lines
2.4 KiB
Java

package org.gcube.common.authorization.utils.manager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.gcube.common.authorization.utils.provider.SecretProvider;
import org.gcube.common.authorization.utils.provider.ClientIDSecretProvider;
import org.gcube.common.authorization.utils.provider.GCubeSecretProvider;
import org.gcube.common.authorization.utils.secret.Secret;
import org.gcube.common.authorization.utils.secret.JWTSecret;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class SecretManager {
public static final InheritableThreadLocal<SecretManager> instance = new InheritableThreadLocal<SecretManager>() {
@Override
protected SecretManager initialValue() {
return new SecretManager();
}
};
private List<SecretProvider> authorizationSecretProviders;
private SecretHolder secretHolder;
private SecretManager(){
authorizationSecretProviders = new ArrayList<>();
secretHolder = new SecretHolder();
}
public List<SecretProvider> getAuthorizationSecretProviders(){
if(authorizationSecretProviders == null) {
authorizationSecretProviders = new ArrayList<>();
@SuppressWarnings("unchecked")
Class<SecretProvider>[] classes = new Class[]{
JWTSecret.class, GCubeSecretProvider.class, ClientIDSecretProvider.class
};
for(Class<SecretProvider> clz : classes) {
try {
SecretProvider authorizationSecretProvider = clz.newInstance();
addAuthorizationSecretProvider(authorizationSecretProvider);
} catch (Exception e) {
}
}
}
return authorizationSecretProviders;
}
public void addAuthorizationSecretProvider(SecretProvider authorizationSecretProvider) {
authorizationSecretProviders.add(authorizationSecretProvider);
Secret authorizationSecret = authorizationSecretProvider.getAuthorizationSecret();
secretHolder.addAuthorizationSecret(authorizationSecret);
}
public void startSession(Secret authorizationSecrets) throws Exception {
authorizationSecrets.set();
}
public void startSession(Collection<Secret> authorizationSecrets) throws Exception {
setAll(authorizationSecrets);
}
public void endSession() throws Exception {
setAll(secretHolder.getAuthorizationSecrets());
}
private void setAll(Collection<Secret> authorizationSecrets) throws Exception {
for(Secret authorizationSecret : authorizationSecrets) {
authorizationSecret.set();
}
}
}