| /* |
| */ |
| package org.taverna.server.master.common; |
| |
| import static org.taverna.server.master.common.Namespaces.XLINK; |
| |
| import java.io.Serializable; |
| import java.net.URI; |
| import java.security.Key; |
| import java.security.cert.Certificate; |
| |
| import javax.xml.bind.annotation.XmlAttribute; |
| import javax.xml.bind.annotation.XmlElement; |
| import javax.xml.bind.annotation.XmlRootElement; |
| import javax.xml.bind.annotation.XmlSchemaType; |
| import javax.xml.bind.annotation.XmlSeeAlso; |
| import javax.xml.bind.annotation.XmlTransient; |
| import javax.xml.bind.annotation.XmlType; |
| |
| import javax.annotation.Nonnull; |
| |
| /** |
| * A description of a private credential. This description is characterised by a |
| * file visible to the workflow run that contains a particular key-pair. |
| * |
| * @author Donal Fellows |
| */ |
| @XmlType(name = "CredentialDescriptor") |
| @XmlSeeAlso({ Credential.KeyPair.class, Credential.Password.class }) |
| @SuppressWarnings("serial") |
| public abstract class Credential implements Serializable { |
| /** The location of this descriptor in the REST world. */ |
| @XmlAttribute(namespace = XLINK) |
| public String href; |
| /** |
| * The location of this descriptor in the SOAP world. Must match corrected |
| * with the {@link #href} field. |
| */ |
| @XmlTransient |
| public String id; |
| /** |
| * The service URI to use this credential with. If omitted, this represents |
| * the <i>default</i> credential to use. |
| */ |
| @XmlElement |
| @XmlSchemaType(name = "anyURI") |
| public URI serviceURI; |
| /** The key extracted from the keystore. */ |
| public transient Key loadedKey; |
| /** The trust chain of the key extracted from the keystore. */ |
| public transient Certificate[] loadedTrustChain; |
| |
| @Override |
| public int hashCode() { |
| return id.hashCode(); |
| } |
| |
| @Override |
| public final boolean equals(Object o) { |
| if (o == null || !(o instanceof Credential)) |
| return false; |
| return equals((Credential) o); |
| } |
| |
| protected boolean equals(@Nonnull Credential c) { |
| return id.equals(c.id); |
| } |
| |
| /** |
| * A description of a credential that is a public/private key-pair in some |
| * kind of key store. |
| * |
| * @author Donal Fellows |
| */ |
| @XmlRootElement(name = "keypair") |
| @XmlType(name = "KeyPairCredential") |
| public static class KeyPair extends Credential { |
| /** The name of the credential within its store, i.e., it's alias. */ |
| @XmlElement(required = true) |
| public String credentialName; |
| /** |
| * The keystore file containing the credential. This is resolved with |
| * respect to the workflow run working directory. |
| */ |
| @XmlElement |
| public String credentialFile; |
| /** |
| * The type of keystore file. Defaults to <tt>JKS</tt> if unspecified. |
| */ |
| @XmlElement |
| public String fileType; |
| /** |
| * The password used to unlock the keystore file. It is assumed that the |
| * same password is used for unlocking the credential within, or that |
| * the inner password is empty. |
| */ |
| @XmlElement |
| public String unlockPassword; |
| /** |
| * The encoded serialized keystore containing the credential. |
| */ |
| @XmlElement |
| public byte[] credentialBytes; |
| |
| @Override |
| public String toString() { |
| return "keypair(id=" + id + ")"; |
| } |
| } |
| |
| /** |
| * A description of a credential that is a username and password. |
| * |
| * @author Donal Fellows |
| */ |
| @XmlRootElement(name = "userpass") |
| @XmlType(name = "PasswordCredential") |
| public static class Password extends Credential { |
| @XmlElement(required = true) |
| public String username; |
| @XmlElement(required = true) |
| public String password; |
| |
| @Override |
| public String toString() { |
| return "userpass(id=" + id + ")"; |
| } |
| } |
| |
| /** |
| * A credential that is just used for deleting credentials by ID. Cannot be |
| * marshalled as XML. |
| * |
| * @author Donal Fellows |
| */ |
| public static class Dummy extends Credential { |
| public Dummy(String id) { |
| this.id = id; |
| } |
| |
| @Override |
| public String toString() { |
| return "dummy(id=" + id + ")"; |
| } |
| } |
| } |