
net.customware.license.jira.AbstractLicenseAction Maven / Gradle / Ivy
package net.customware.license.jira;
import java.io.File;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import net.customware.license.support.util.LicenseUtils;
import webwork.action.ServletActionContext;
import webwork.multipart.MultiPartRequestWrapper;
import com.atlassian.jira.security.Permissions;
import com.atlassian.jira.web.action.JiraWebActionSupport;
import de.schlichtherle.license.LicenseContent;
import de.schlichtherle.license.LicenseManager;
/**
* This class provides the basline for allowing plugins to install their own
* license key.
*
* @author David Peterson
*/
public abstract class AbstractLicenseAction extends JiraWebActionSupport {
private static final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;
private static LicenseManager licenseManager = null;
private MultiPartRequestWrapper multiPartRequest;
private String upload;
private String uninstall;
private DateFormat dateFormatter;
protected final MultiPartRequestWrapper getMultiPartRequest() {
if ( multiPartRequest == null && ServletActionContext.getRequest() instanceof MultiPartRequestWrapper ) {
multiPartRequest = ( MultiPartRequestWrapper ) ServletActionContext.getRequest();
}
return multiPartRequest;
}
@Override public final String execute() throws Exception {
super.execute();
// place security check in here as the webwork1 plugin in JIRA doesnt
// support "required-roles"!
if ( !this.getPermissionManager().hasPermission( Permissions.ADMINISTER, getRemoteUser() ) ) {
return PERMISSION_VIOLATION_RESULT;
}
if ( uninstall != null ) {
return doUninstall();
}
if ( upload != null ) {
return doInstall();
}
return INPUT;
}
private String doUninstall() {
try {
getLicenseManager().uninstall();
return SUCCESS;
} catch ( Exception e ) {
e.printStackTrace();
addErrorMessage( getText( e.getLocalizedMessage() ) );
return ERROR;
}
}
private String doInstall() {
File licenseFile = getMultiPartRequest().getFile( "licenseFile" );
if ( licenseFile == null ) {
addErrorMessage( getText( "license.error.uploadFileRequired" ) );
return ERROR;
}
try {
getLicenseManager().install( licenseFile );
} catch ( Exception e ) {
e.printStackTrace();
addErrorMessage( getText( e.getLocalizedMessage() ) );
return ERROR;
}
return SUCCESS;
}
public final LicenseContent getLicenseContent() {
try {
return getLicenseManager().verify();
} catch ( Exception e ) {
return null;
}
}
public String getLicenseHolder() {
LicenseContent content = getLicenseContent();
if ( content != null ) {
return LicenseUtils.formatX500Principal( content.getHolder() );
}
return null;
}
public String getLicenseIssuer() {
LicenseContent content = getLicenseContent();
if ( content != null ) {
return LicenseUtils.formatX500Principal( content.getIssuer() );
}
return null;
}
public int getLicenseExpiring() {
LicenseContent lc = getLicenseContent();
if ( lc != null && lc.getNotAfter() != null ) {
long now = System.currentTimeMillis();
long expires = lc.getNotAfter().getTime();
return ( int ) ( ( expires - now ) / MILLIS_PER_DAY );
}
return Integer.MAX_VALUE;
}
public final String getUpload() {
return upload;
}
public final void setUpload( final String upload ) {
this.upload = upload;
}
protected final LicenseManager getLicenseManager() {
if ( licenseManager == null ) {
licenseManager = createLicenseManager();
}
return licenseManager;
}
public final String getUninstall() {
return uninstall;
}
public final void setUninstall( final String uninstall ) {
this.uninstall = uninstall;
}
public final DateFormat getDateFormatter() {
if ( dateFormatter == null ) {
dateFormatter = new SimpleDateFormat( getDateFormat() );
}
return dateFormatter;
}
public final String getAbsoluteEulaPath() {
String eulaPath = getEulaPath();
if ( eulaPath != null && eulaPath.startsWith( "/" ) ) {
eulaPath = ServletActionContext.getRequest().getContextPath() + eulaPath;
}
return eulaPath;
}
/**
* Called to create the license manager for this plugin.
*
* @return The license manager implementation.
*/
protected abstract LicenseManager createLicenseManager();
/**
* Returns the name of the plugin, for use in the user interface.
* Implementors may wish to use the {@link #getText(String)} method(s) to
* internationalise the title.
*
* @return The plugin name.
*/
public abstract String getPluginName();
/**
* Returns the Confluence-relative path to the EULA text.
*
* @return The EULA path.
*/
public abstract String getEulaPath();
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy