package org.codehaus.mojo.webstart;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
import java.io.File;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.codehaus.mojo.keytool.GenkeyMojo;
/**
* Bean that represents the JarSigner configuration.
*
* Specific to the JarSignMojo
*
* @author <a href="jerome@coffeebreaks.org">Jerome Lacoste</a>
* @version $Id$
*/
public class JarSignMojoConfig implements SignConfig
{
protected Log log;
protected File workDirectory;
protected boolean verbose;
/**
* Returns a fully configured version of a Mojo ready to sign jars.
* You will need to attach set the MavenProject is you don't sign in place.
* @return
*/
public JarSignerMojo getJarSignerMojo()
{
JarSignMojo2 signJar = new JarSignMojo2();
signJar.setAlias( getAlias() );
signJar.setKeypass( getKeypass() );
signJar.setKeystore( getKeystore() );
signJar.setSkipAttachSignedArtifact( true );
signJar.setSigFile( getSigfile() );
signJar.setStorepass( getStorepass() );
signJar.setType( getStoretype() );
signJar.setVerify( getVerify() );
signJar.setWorkingDir( workDirectory );
signJar.setVerbose( verbose );
signJar.setLog( log );
return signJar;
}
public void init( Log log, File workDirectory, boolean verbose )
throws MojoExecutionException, MojoFailureException
{
this.log = log;
this.workDirectory = workDirectory;
this.verbose = verbose;
if ( keystoreConfig != null && keystoreConfig.isGen() )
{
if ( keystoreConfig.isDelete() )
{
deleteKeyStore();
}
genKeyStore();
}
}
/**
* Keystore configuration
*
*/
public static class KeystoreConfig
{
private boolean delete;
private boolean gen;
public boolean isDelete()
{
return delete;
}
public void setDelete( boolean delete )
{
this.delete = delete;
}
public boolean isGen()
{
return gen;
}
public void setGen( boolean gen )
{
this.gen = gen;
}
}
private KeystoreConfig keystoreConfig;
/**
*/
private String keystore;
/**
*/
private String keyalg;
/**
*/
private String keysize;
/**
*/
private String sigalg;
/**
*/
private String sigfile;
/**
*/
private String storetype;
/**
*/
private String storepass;
/**
*/
private String keypass;
/**
*/
private String validity;
/**
*/
private String dnameCn;
/**
*/
private String dnameOu;
/**
*/
private String dnameL;
/**
*/
private String dnameSt;
/**
*/
private String dnameO;
/**
*/
private String dnameC;
/**
*/
private String alias;
/**
* Whether we want to auto-verify the signed jars.
*/
private boolean verify;
public void setKeystoreConfig( KeystoreConfig keystoreConfig )
{
this.keystoreConfig = keystoreConfig;
}
public void setKeystore( String keystore )
{
this.keystore = keystore;
}
public void setKeyalg( String keyalg )
{
this.keyalg = keyalg;
}
public void setKeysize( String keysize )
{
this.keysize = keysize;
}
public void setSigalg( String sigalg )
{
this.sigalg = sigalg;
}
public void setSigfile( String sigfile )
{
this.sigfile = sigfile;
}
public void setStoretype( String storetype )
{
this.storetype = storetype;
}
public void setStorepass( String storepass )
{
this.storepass = storepass;
}
public void setKeypass( String keypass )
{
this.keypass = keypass;
}
public void setValidity( String validity )
{
this.validity = validity;
}
public void setDnameCn( String dnameCn )
{
this.dnameCn = dnameCn;
}
public void setDnameOu( String dnameOu )
{
this.dnameOu = dnameOu;
}
public void setDnameL( String dnameL )
{
this.dnameL = dnameL;
}
public void setDnameSt( String dnameSt )
{
this.dnameSt = dnameSt;
}
public void setDnameO( String dnameO )
{
this.dnameO = dnameO;
}
public void setDnameC( String dnameC )
{
this.dnameC = dnameC;
}
public void setAlias( String alias )
{
this.alias = alias;
}
public void setVerify( boolean verify )
{
this.verify = verify;
}
public String getKeystore()
{
return keystore;
}
public String getKeyalg()
{
return keyalg;
}
public String getKeysize()
{
return keysize;
}
public String getSigalg()
{
return sigalg;
}
public String getSigfile()
{
return sigfile;
}
public String getStoretype()
{
return storetype;
}
public String getStorepass()
{
return storepass;
}
public String getKeypass()
{
return keypass;
}
public String getValidity()
{
return validity;
}
public String getDnameCn()
{
return dnameCn;
}
public String getDnameOu()
{
return dnameOu;
}
public String getDnameL()
{
return dnameL;
}
public String getDnameSt()
{
return dnameSt;
}
public String getDnameO()
{
return dnameO;
}
public String getDnameC()
{
return dnameC;
}
public String getAlias()
{
return alias;
}
public boolean getVerify()
{
return verify;
}
public String getDname()
{
StringBuffer buffer = new StringBuffer( 128 );
appendToDnameBuffer( dnameCn, buffer, "CN" );
appendToDnameBuffer( dnameOu, buffer, "OU" );
appendToDnameBuffer( dnameL, buffer, "L" );
appendToDnameBuffer( dnameSt, buffer, "ST" );
appendToDnameBuffer( dnameO, buffer, "O" );
appendToDnameBuffer( dnameC, buffer, "C" );
return buffer.toString();
}
private void appendToDnameBuffer( final String property, StringBuffer buffer, final String prefix )
{
if ( property != null )
{
if ( buffer.length() > 0 )
{
buffer.append( ", " );
}
buffer.append( prefix ).append( "=" );
buffer.append( property );
}
}
/**
* Used by init()
* @throws MojoExecutionException
*/
private void genKeyStore()
throws MojoExecutionException
{
GenkeyMojo genKeystore = new GenkeyMojo();
genKeystore.setAlias( getAlias() );
genKeystore.setDname( getDname() );
genKeystore.setKeyalg( getKeyalg() );
genKeystore.setKeypass( getKeypass() );
genKeystore.setKeysize( getKeysize() );
genKeystore.setKeystore( getKeystore() );
genKeystore.setSigalg( getSigalg() );
genKeystore.setStorepass( getStorepass() );
genKeystore.setStoretype( getStoretype() );
genKeystore.setValidity( getValidity() );
genKeystore.setVerbose( verbose );
genKeystore.setWorkingDir( workDirectory );
genKeystore.setLog( log );
genKeystore.execute();
}
private void deleteKeyStore()
{
File keyStore = null;
if ( getKeystore() != null )
{
keyStore = new File( getKeystore() );
}
else
{
// FIXME decide if we really want this.
// keyStore = new File( System.getProperty( "user.home") + File.separator + ".keystore" );
}
if ( keyStore == null )
{
return;
}
if ( keyStore.exists() )
{
if ( keyStore.delete() )
{
log.debug( "deleted keystore from: " + keyStore.getAbsolutePath() );
}
else
{
log.warn( "Couldn't delete keystore from: " + keyStore.getAbsolutePath() );
}
}
else
{
log.debug( "Skipping deletion of non existing keystore: " + keyStore.getAbsolutePath() );
}
}
}