81 lines
2.4 KiB
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();
|
|
}
|
|
}
|
|
|
|
}
|