All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.italiangrid.voms.credential.impl.DefaultLoadCredentialsStrategy Maven / Gradle / Ivy

There is a newer version: 3.3.2
Show newest version
/**
 * Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2012.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.italiangrid.voms.credential.impl;

import org.bouncycastle.openssl.PasswordFinder;
import org.italiangrid.voms.VOMSError;
import org.italiangrid.voms.credential.LoadCredentialsEventListener;
import org.italiangrid.voms.credential.ProxyNamingPolicy;
import org.italiangrid.voms.util.NullListener;

import eu.emi.security.authn.x509.X509Credential;

/**
 * The default strategy used to load user credentials when no file is explicitly
 * pointed out by the user of this API.
 * 
 * Credentials are searched in the following places (in sequence):
 * 
 * 
    * *
  • If the X509_USER_CERT and X509_USER_KEY * environment variables are set, their values are used to load the user * credentials
  • * *
  • If the X509_USER_CERT and X509_USER_KEY * system properties are set, their values are used to load the user * credentials
  • * *
  • If the PKCS12_USER_CERT environment variable is set, its * value is used to load the user credentials.
  • * *
  • If the PKCS12_USER_CERT system property is set, its * value is used to load the user credentials.
  • * *
  • The content of the .globus directory in the user's home * is searched for a PEM certificate (in the usercert.pem and * userkey.pem files).
  • * *
  • The content of the .globus directory in the user's home is searched * for a PKC12 certificate (in the usercert.p12 file).
  • *
* */ public class DefaultLoadCredentialsStrategy extends AbstractLoadCredentialsStrategy { private static final String GLOBUS_PKCS12_CRED_PATH_SUFFIX = ".globus/usercred.p12"; private static final String GLOBUS_PEM_CERT_PATH_SUFFIX = ".globus/usercert.pem"; private static final String GLOBUS_PEM_KEY_PATH_SUFFIX = ".globus/userkey.pem"; public static final String HOME_PROPERTY = "user.home"; public static final String TMPDIR_PROPERTY = "java.io.tmpdir"; public static final String TMPDIR_PATH = "/tmp"; private static final ProxyNamingPolicy proxyPathBuilder = new DefaultProxyPathBuilder(); private String home; private String tmpDir; public DefaultLoadCredentialsStrategy(String homeFolder, String tempDir, LoadCredentialsEventListener listener) { super(listener); this.home = homeFolder; this.tmpDir = tempDir; if (home == null) throw new VOMSError(HOME_PROPERTY+" not found in system properties!"); } public DefaultLoadCredentialsStrategy(String homeFolder) { this(homeFolder, System.getProperty(TMPDIR_PROPERTY), NullListener.INSTANCE); } public DefaultLoadCredentialsStrategy() { this(System.getProperty(HOME_PROPERTY), System.getProperty(TMPDIR_PROPERTY), NullListener.INSTANCE); } public DefaultLoadCredentialsStrategy(LoadCredentialsEventListener listener){ this(System.getProperty(HOME_PROPERTY), System.getProperty(TMPDIR_PROPERTY), listener); } /** * Looks for the value of a given property in the environment or in the * system properties * @param propName the property that will be looked for * @return the property value, or null if no property was found */ public String getFromEnvOrSystemProperty(String propName){ String val = System.getenv(propName); if (val == null) val = System.getProperty(propName); return val; } public X509Credential loadCredentials(PasswordFinder pf) { if (pf == null) throw new IllegalArgumentException("Please provide a non-null password finder!"); try { X509Credential cred = loadPEMCredentialFromEnv(pf); if (cred == null) cred = loadPKCS12CredentialFromEnv(pf); if (cred == null) cred = loadPEMCredentialsFromGlobusDir(pf); if (cred == null) cred = loadPKCS12CredentialsFromGlobusDir(pf); return cred; } catch (Exception e) { throw new VOMSError("Error loading credential: "+e.getMessage(),e); } } protected X509Credential loadProxyFromUID(){ String uid = getFromEnvOrSystemProperty(VOMS_USER_ID); if (uid != null){ String proxyFile = proxyPathBuilder.buildProxyFileName(tmpDir, Integer.parseInt(uid)); return loadProxyCredential(proxyFile); } return null; } protected X509Credential loadProxyFromEnv() { String proxyPath = getFromEnvOrSystemProperty(X509_USER_PROXY); if (proxyPath != null) return loadProxyCredential(proxyPath); return null; } protected X509Credential loadPEMCredentialFromEnv(PasswordFinder pf) { String certPath = getFromEnvOrSystemProperty(X509_USER_CERT); String keyPath = getFromEnvOrSystemProperty(X509_USER_KEY); if (certPath != null && keyPath != null){ return loadPEMCredential(keyPath, certPath, pf); } return null; } protected X509Credential loadPKCS12CredentialFromEnv(PasswordFinder pf) { String pkcs12Path = getFromEnvOrSystemProperty(PKCS12_USER_CERT); if (pkcs12Path != null){ return loadPKCS12Credential(pkcs12Path, pf); } return null; } protected X509Credential loadPKCS12CredentialsFromGlobusDir(PasswordFinder pf) { String credPath = String.format("%s/%s", home, GLOBUS_PKCS12_CRED_PATH_SUFFIX); return loadPKCS12Credential(credPath, pf); } protected X509Credential loadPEMCredentialsFromGlobusDir(PasswordFinder pf) { String certPath = String.format("%s/%s", home, GLOBUS_PEM_CERT_PATH_SUFFIX); String keyPath = String.format("%s/%s", home, GLOBUS_PEM_KEY_PATH_SUFFIX); return loadPEMCredential(keyPath, certPath, pf); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy