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

net.java.truelicense.core.BasicLicenseApplicationContext Maven / Gradle / Ivy

There is a newer version: 2.6.6
Show newest version
/*
 * Copyright (C) 2005-2013 Schlichtherle IT Services.
 * All rights reserved. Use is subject to license terms.
 */
package net.java.truelicense.core;

import java.io.File;
import java.util.*;
import static java.util.Calendar.*;
import java.util.prefs.Preferences;
import javax.annotation.CheckForNull;
import javax.annotation.concurrent.Immutable;
import net.java.truelicense.core.auth.*;
import net.java.truelicense.core.codec.Codec;
import net.java.truelicense.core.crypto.*;
import net.java.truelicense.core.io.*;
import net.java.truelicense.core.policy.*;
import net.java.truelicense.core.util.*;
import static net.java.truelicense.core.util.Objects.*;
import net.java.truelicense.obfuscate.ObfuscatedString;

/**
 * A basic context for license applications.
 * 

* Note that this class is immutable. * Unless stated otherwise, all no-argument methods need to return consistent * objects so that caching them is not required. * A returned object is considered to be consistent if it compares * {@linkplain Object#equals(Object) equal} or at least behaves identical to * any previously returned object. * * @author Christian Schlichtherle */ @Immutable abstract class BasicLicenseApplicationContext implements LicenseApplicationContext, LicenseSubjectProvider, PasswordPolicyProvider, Clock, ClassLoaderProvider { private final LicenseManagementContext context; BasicLicenseApplicationContext(final LicenseManagementContext context) { assert null != context; this.context = context; } @Override public final String subject() { return context().subject(); } @Override public final LicenseManagementContext context() { return context; } @Override public final PasswordPolicy policy() { return context().policy(); } @Override public final Date now() { return context().now(); } @Override public final @CheckForNull ClassLoader classLoader() { return context().classLoader(); } final LicenseParameters consumerParameters( final Authentication authentication, final Encryption encryption) { if (authentication.parameters().forSigning()) throw new IllegalArgumentException(); return parameters(authentication, encryption); } final LicenseParameters vendorParameters( final Authentication authentication, final Encryption encryption) { if (!authentication.parameters().forSigning()) throw new IllegalArgumentException(); return parameters(authentication, encryption); } private LicenseParameters parameters( final Authentication authentication, final Encryption encryption) { final LicenseManagementContext c = context(); return parameters(c.initialization(), authentication, encryption); } final LicenseParameters ftpParameters( final LicenseConsumerManager parent, final Authentication authentication, final @CheckForNull Encryption encryption, final int days) { if (!authentication.parameters().forSigning()) throw new IllegalArgumentException(); if (0 >= days) throw new IllegalArgumentException(); final LicenseInitialization init = new LicenseInitialization() { final LicenseInitialization delegate = context().initialization(); @Override public void initialize(final License license) { delegate.initialize(license); final Calendar cal = getInstance(); cal.setTime(license.getIssued()); license.setNotBefore(cal.getTime()); // not before issued cal.add(DATE, days); // FTP countdown starts NOW license.setNotAfter(cal.getTime()); } }; return chainedParameters(parent, init, authentication, encryption); } final LicenseParameters chainedParameters( LicenseConsumerManager parent, Authentication authentication, final @CheckForNull Encryption encryption) { if (authentication.parameters().forSigning()) throw new IllegalArgumentException(); return chainedParameters(parent, context().initialization(), authentication, encryption); } private LicenseParameters chainedParameters( final LicenseConsumerManager parent, final LicenseInitialization initialization, final Authentication authentication, final @CheckForNull Encryption encryption) { return parameters(initialization, authentication, null != encryption ? encryption : parent.parameters().encryption()); } private LicenseParameters parameters( final LicenseInitialization initialization, final Authentication authentication, final Encryption encryption) { final LicenseManagementContext c = context(); return parameters(c.authorization(), initialization, c.validation(), c, authentication, c.codec(), c.compression(), encryption); } private LicenseParameters parameters( final LicenseAuthorization authorization, final LicenseInitialization initialization, final LicenseValidation validation, final RepositoryProvider rp, final Authentication authentication, final Codec codec, final Transformation compression, final Encryption encryption) { requireNonNull(authorization); requireNonNull(initialization); requireNonNull(validation); requireNonNull(authentication); requireNonNull(codec); requireNonNull(compression); requireNonNull(encryption); return new LicenseParameters() { @Override public LicenseAuthorization authorization() { return authorization; } @Override public LicenseInitialization initialization() { return initialization; } @Override public LicenseValidation validation() { return validation; } @Override public Repository repository() { return rp.repository(); } @Override public Authentication authentication() { return authentication; } @Override public Codec codec() { return codec; } @Override public Transformation compression() { return compression; } @Override public Encryption encryption() { return encryption; } }; } final KeyStoreParameters ksChecked( final @CheckForNull Source source, final @CheckForNull String storeType, final ObfuscatedString storePassword, final String alias, final ObfuscatedString keyPassword) { final KeyStoreParameters ksp = ksUnchecked(source, storeType, storePassword, alias, keyPassword); check(ksp.storePassword()); check(ksp.keyPassword()); return ksp; } final KeyStoreParameters ksUnchecked( final @CheckForNull Source source, final @CheckForNull String storeType, final ObfuscatedString storePassword, final String alias, final @CheckForNull ObfuscatedString keyPassword) { requireNonNull(storePassword); requireNonNull(alias); return new KeyStoreParameters() { final String st = null != storeType ? storeType : context().storeType(); @Override public String storeType() { return st; } @Override public Source source() { return source; } @Override public String alias() { return alias; } @Override public char[] storePassword() { return storePassword.toCharArray(); } @Override public char[] keyPassword() { return null == keyPassword ? null : keyPassword.toCharArray(); } @Override public boolean forSigning() { return null != keyPassword; } }; } final PbeParameters pbeChecked( final @CheckForNull String algorithm, final ObfuscatedString password) { final PbeParameters pp = pbeUnchecked(algorithm, password); check(pp.password()); return pp; } final PbeParameters pbeUnchecked( final @CheckForNull String algorithm, final ObfuscatedString password) { requireNonNull(password); return new PbeParameters() { final String a = null != algorithm ? algorithm : context().pbeAlgorithm(); @Override public String algorithm() { return a; } @Override public char[] password() { return password.toCharArray(); } }; } private void check(final char[] password) { try { policy().check(password); } catch (final WeakPasswordException ex) { throw new IllegalArgumentException(ex); } finally { Arrays.fill(password, (char) 0); } } @Override public Source resource(String name) { return Sources.forResource(name, classLoader()); } @Override public Store systemNodeStore(Class classInPackage) { return new PreferencesStore( Preferences.systemNodeForPackage(classInPackage), subject()); } @Override public Store userNodeStore(Class classInPackage) { return new PreferencesStore( Preferences.userNodeForPackage(classInPackage), subject()); } @Override public Store fileStore(File file) { return new FileStore(file); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy