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 instance = new InheritableThreadLocal() { @Override protected SecretManager initialValue() { return new SecretManager(); } }; private List authorizationSecretProviders; private SecretHolder secretHolder; private SecretManager(){ authorizationSecretProviders = new ArrayList<>(); secretHolder = new SecretHolder(); } public List getAuthorizationSecretProviders(){ if(authorizationSecretProviders == null) { authorizationSecretProviders = new ArrayList<>(); @SuppressWarnings("unchecked") Class[] classes = new Class[]{ JWTSecret.class, GCubeSecretProvider.class, ClientIDSecretProvider.class }; for(Class 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 authorizationSecrets) throws Exception { setAll(authorizationSecrets); } public void endSession() throws Exception { setAll(secretHolder.getAuthorizationSecrets()); } private void setAll(Collection authorizationSecrets) throws Exception { for(Secret authorizationSecret : authorizationSecrets) { authorizationSecret.set(); } } }