Projet

Général

Profil

Télécharger (6,99 ko) Statistiques
| Branche: | Tag: | Révision:
/*
* This program is a part of the IoTa project.
*
* Copyright © 2011-2013 Université de Caen Basse-Normandie, GREYC
* Copyright © 2011 Orange Labs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* <http://www.gnu.org/licenses/>
*
* See AUTHORS for a list of contributors.
*/
package fr.unicaen.iota.eta.user.client;

import fr.unicaen.iota.eta.user.userservice.*;
import fr.unicaen.iota.eta.user.userservice_wsdl.ImplementationExceptionResponse;
import fr.unicaen.iota.eta.user.userservice_wsdl.SecurityExceptionResponse;
import fr.unicaen.iota.eta.user.userservice_wsdl.UserService;
import fr.unicaen.iota.eta.user.userservice_wsdl.UserServicePortType;
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import java.security.KeyStore;
import java.security.SecureRandom;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManagerFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

/**
* SOAP Client to interrogate the user directory.
*
*/
public class UserClient {

private UserServicePortType port;

private static final Log log = LogFactory.getLog(UserClient.class);

public UserClient(String userAddress) {
this(userAddress, null, null, null, null);
}

public UserClient(String address, String pksFilename, String pksPassword, String trustPksFilename, String trustPksPassword) {
log.trace("new UserClient: " + address);
try {
configureService(address, pksFilename, pksPassword, trustPksFilename, trustPksPassword);
} catch (Exception e) {
throw new RuntimeException("Can’t configure service: " + e.getMessage(), e);
}
}

public void configureService(String address, String pksFilename, String pksPassword, String trustPksFilename, String trustPksPassword) throws Exception {
System.setProperty("javax.net.ssl.keyStore", pksFilename);
System.setProperty("javax.net.ssl.keyStorePassword", pksPassword);
System.setProperty("javax.net.ssl.trustStore", trustPksFilename);
System.setProperty("javax.net.ssl.trustStorePassword", trustPksPassword);
URL wsdlUrl = new URL(address + "?wsdl");
UserService service = new UserService(wsdlUrl);
port = service.getPort(UserServicePortType.class);

// turn off chunked transfer encoding
Client client = ClientProxy.getClient(port);
HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setAllowChunking(false);
httpConduit.setClient(httpClientPolicy);

if (pksFilename != null) {
log.debug("Authenticating with certificate in file: " + pksFilename);

if (!wsdlUrl.getProtocol().equalsIgnoreCase("https")) {
throw new Exception("Authentication method requires the use of HTTPS");
}

KeyStore keyStore = KeyStore.getInstance(pksFilename.endsWith(".p12") ? "PKCS12" : "JKS");
keyStore.load(new FileInputStream(new File(pksFilename)), pksPassword.toCharArray());
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
keyManagerFactory.init(keyStore, pksPassword.toCharArray());

KeyStore trustStore = KeyStore.getInstance(trustPksFilename.endsWith(".p12") ? "PKCS12" : "JKS");
trustStore.load(new FileInputStream(new File(trustPksFilename)), trustPksPassword.toCharArray());
TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
trustManagerFactory.init(trustStore);

TLSClientParameters tlscp = new TLSClientParameters();
tlscp.setSecureRandom(new SecureRandom());
tlscp.setKeyManagers(keyManagerFactory.getKeyManagers());
tlscp.setTrustManagers(trustManagerFactory.getTrustManagers());

httpConduit.setTlsClientParameters(tlscp);
}
}

public UserLogoutOut userLogout(String sessionID) throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserLogoutIn userLogoutIn = new UserLogoutIn();
userLogoutIn.setSid(sessionID);
return port.userLogout(userLogoutIn);
}

public UserLoginOut userBasicLogin(String user, String password) throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserBasicLoginIn userBasicLoginIn = new UserBasicLoginIn();
userBasicLoginIn.setUserID(user);
userBasicLoginIn.setPassword(password);
return port.userBasicLogin(userBasicLoginIn);
}

public UserLoginOut userCertLogin(String user) throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserCertLoginIn userCertLoginIn = new UserCertLoginIn();
userCertLoginIn.setUserID(user);
return port.userCertLogin(userCertLoginIn);
}

public UserInfoOut userInfo(String sid, String user) throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserInfoIn userInfoIn = new UserInfoIn();
userInfoIn.setUserID(user);
userInfoIn.setSid(sid);
return port.userInfo(userInfoIn);
}

public UserLookupOut userLookup(String sid, String user) throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserLookupIn userLookupIn = new UserLookupIn();
userLookupIn.setUserID(user);
userLookupIn.setSid(sid);
return port.userLookup(userLookupIn);
}

public UserCreateOut userCreate(String sid, String user, String password, String partner, int time)
throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserCreateIn userCreateIn = new UserCreateIn();
userCreateIn.setUserID(user);
userCreateIn.setSid(sid);
userCreateIn.setPassword(password);
userCreateIn.setPartnerID(partner);
userCreateIn.setLoginMode(TLoginMode.KEY_AND_PASSWORD);
userCreateIn.setSessionLease(time);
return port.userCreate(userCreateIn);
}

public UserDeleteOut userDelete(String sid, String user) throws ImplementationExceptionResponse, SecurityExceptionResponse {
UserDeleteIn userDeleteIn = new UserDeleteIn();
userDeleteIn.setSid(sid);
userDeleteIn.setUserID(user);
return port.userDelete(userDeleteIn);
}
}
    (1-1/1)