Java tutorial
/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for * license information. */ package com.microsoft.azure.batch; import com.microsoft.azure.PagedList; import com.microsoft.azure.batch.protocol.models.BatchErrorException; import com.microsoft.azure.batch.protocol.models.Certificate; import com.microsoft.azure.batch.protocol.models.CertificateAddOptions; import com.microsoft.azure.batch.protocol.models.CertificateAddParameter; import com.microsoft.azure.batch.protocol.models.CertificateCancelDeletionOptions; import com.microsoft.azure.batch.protocol.models.CertificateDeleteOptions; import com.microsoft.azure.batch.protocol.models.CertificateFormat; import com.microsoft.azure.batch.protocol.models.CertificateGetHeaders; import com.microsoft.azure.batch.protocol.models.CertificateGetOptions; import com.microsoft.azure.batch.protocol.models.CertificateListHeaders; import com.microsoft.azure.batch.protocol.models.CertificateListOptions; import com.microsoft.rest.ServiceResponseWithHeaders; import org.apache.commons.codec.binary.Base64; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateEncodingException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.Collection; import java.util.List; /** * Performs certificate related operations on an Azure Batch account. */ public class CertificateOperations implements IInheritedBehaviors { private Collection<BatchClientBehavior> _customBehaviors; private BatchClient _parentBatchClient; /** * The SHA certificate algorithm */ public static final String SHA1_CERTIFICATE_ALGORITHM = "sha1"; CertificateOperations(BatchClient batchClient, Iterable<BatchClientBehavior> inheritedBehaviors) { _parentBatchClient = batchClient; // inherit from instantiating parent InternalHelper.InheritClientBehaviorsAndSetPublicProperty(this, inheritedBehaviors); } /** * Gets a list of behaviors that modify or customize requests to the Batch service. * * @return A list of BatchClientBehavior */ @Override public Collection<BatchClientBehavior> customBehaviors() { return _customBehaviors; } /** * Sets a list of behaviors that modify or customize requests to the Batch service. * * @param behaviors The collection of BatchClientBehavior classes * @return The current instance */ @Override public IInheritedBehaviors withCustomBehaviors(Collection<BatchClientBehavior> behaviors) { _customBehaviors = behaviors; return this; } private static String getThumbPrint(java.security.cert.Certificate cert) throws NoSuchAlgorithmException, CertificateEncodingException { MessageDigest md = MessageDigest.getInstance("SHA-1"); byte[] der = cert.getEncoded(); md.update(der); byte[] digest = md.digest(); return hexify(digest); } private static String hexify(byte bytes[]) { char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; StringBuffer buf = new StringBuffer(bytes.length * 2); for (int i = 0; i < bytes.length; ++i) { buf.append(hexDigits[(bytes[i] & 0xf0) >> 4]); buf.append(hexDigits[bytes[i] & 0x0f]); } return buf.toString(); } /** * Creates a new {@link Certificate} from .cer format data in stream. * * @param certStream The certificate data in .cer format. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization * @throws CertificateException Exception thrown on parsing errors * @throws NoSuchAlgorithmException Exception thrown if the X509 provider is not registered in the security provider list. */ public void createCertificate(InputStream certStream) throws BatchErrorException, IOException, CertificateException, NoSuchAlgorithmException { createCertificate(certStream, null); } /** * Creates a new {@link Certificate} from .cer format data in stream. * * @param certStream The certificate data in .cer format. * @param additionalBehaviors A collection of {@link BatchClientBehavior} instances that are applied to the Batch service request. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization * @throws CertificateException Exception thrown on parsing errors * @throws NoSuchAlgorithmException Exception thrown if the X509 provider is not registered in the security provider list. */ public void createCertificate(InputStream certStream, Iterable<BatchClientBehavior> additionalBehaviors) throws BatchErrorException, IOException, CertificateException, NoSuchAlgorithmException { CertificateFactory x509CertFact = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) x509CertFact.generateCertificate(certStream); CertificateAddParameter addParam = new CertificateAddParameter(); addParam.withCertificateFormat(CertificateFormat.CER); addParam.withThumbprintAlgorithm(SHA1_CERTIFICATE_ALGORITHM); addParam.withThumbprint(getThumbPrint(cert)); addParam.withData(Base64.encodeBase64String(cert.getEncoded())); createCertificate(addParam, additionalBehaviors); } /** * Creates a new {@link Certificate} by {@link CertificateAddParameter} * * @param certificate The parameter to create certificate * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public void createCertificate(CertificateAddParameter certificate) throws BatchErrorException, IOException { createCertificate(certificate, null); } /** * Creates a new {@link Certificate} by {@link CertificateAddParameter} * * @param certificate The parameter to create certificate * @param additionalBehaviors A collection of {@link BatchClientBehavior} instances that are applied to the Batch service request. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public void createCertificate(CertificateAddParameter certificate, Iterable<BatchClientBehavior> additionalBehaviors) throws BatchErrorException, IOException { CertificateAddOptions options = new CertificateAddOptions(); BehaviorManager bhMgr = new BehaviorManager(this.customBehaviors(), additionalBehaviors); bhMgr.applyRequestBehaviors(options); this._parentBatchClient.protocolLayer().certificates().add(certificate, options); } /** * Cancels a failed deletion of the specified certificate. This can be done only when * the certificate is in the DeleteFailed state, and restores the certificate to the Active state. * * @param thumbprintAlgorithm The algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint The thumbprint of the certificate that failed to delete. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public void cancelDeleteCertificate(String thumbprintAlgorithm, String thumbprint) throws BatchErrorException, IOException { cancelDeleteCertificate(thumbprintAlgorithm, thumbprint, null); } /** * Cancels a failed deletion of the specified certificate. This can be done only when * the certificate is in the DeleteFailed state, and restores the certificate to the Active state. * * @param thumbprintAlgorithm The algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint The thumbprint of the certificate that failed to delete. * @param additionalBehaviors A collection of {@link BatchClientBehavior} instances that are applied to the Batch service request. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public void cancelDeleteCertificate(String thumbprintAlgorithm, String thumbprint, Iterable<BatchClientBehavior> additionalBehaviors) throws BatchErrorException, IOException { CertificateCancelDeletionOptions options = new CertificateCancelDeletionOptions(); BehaviorManager bhMgr = new BehaviorManager(this.customBehaviors(), additionalBehaviors); bhMgr.applyRequestBehaviors(options); this._parentBatchClient.protocolLayer().certificates().cancelDeletion(thumbprintAlgorithm, thumbprint, options); } /** * Deletes the certificate from the Batch account. * * @param thumbprintAlgorithm The algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint The thumbprint of the certificate to delete. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public void deleteCertificate(String thumbprintAlgorithm, String thumbprint) throws BatchErrorException, IOException { deleteCertificate(thumbprintAlgorithm, thumbprint, null); } /** * Deletes the certificate from the Batch account. * * @param thumbprintAlgorithm The algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint The thumbprint of the certificate to delete. * @param additionalBehaviors A collection of {@link BatchClientBehavior} instances that are applied to the Batch service request. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public void deleteCertificate(String thumbprintAlgorithm, String thumbprint, Iterable<BatchClientBehavior> additionalBehaviors) throws BatchErrorException, IOException { CertificateDeleteOptions options = new CertificateDeleteOptions(); BehaviorManager bhMgr = new BehaviorManager(this.customBehaviors(), additionalBehaviors); bhMgr.applyRequestBehaviors(options); this._parentBatchClient.protocolLayer().certificates().delete(thumbprintAlgorithm, thumbprint, options); } /** * Gets the specified {@link Certificate}. * * @param thumbprintAlgorithm The algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint The thumbprint of the certificate to get. * @return A {@link Certificate} containing information about the specified certificate in the Azure Batch account. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public Certificate getCertificate(String thumbprintAlgorithm, String thumbprint) throws BatchErrorException, IOException { return getCertificate(thumbprintAlgorithm, thumbprint, null, null); } /** * Gets the specified {@link Certificate}. * * @param thumbprintAlgorithm The algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint The thumbprint of the certificate to get. * @param detailLevel A {@link DetailLevel} used for filtering the list and for controlling which properties are retrieved from the service. * @return A {@link Certificate} containing information about the specified certificate in the Azure Batch account. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public Certificate getCertificate(String thumbprintAlgorithm, String thumbprint, DetailLevel detailLevel) throws BatchErrorException, IOException { return getCertificate(thumbprintAlgorithm, thumbprint, detailLevel, null); } /** * Gets the specified {@link Certificate}. * * @param thumbprintAlgorithm the algorithm used to derive the thumbprint parameter. This must be sha1. * @param thumbprint the thumbprint of the certificate to get. * @param detailLevel A {@link DetailLevel} used for filtering the list and for controlling which properties are retrieved from the service. * @param additionalBehaviors A collection of {@link BatchClientBehavior} instances that are applied to the Batch service request. * @return A {@link Certificate} containing information about the specified certificate in the Azure Batch account. * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public Certificate getCertificate(String thumbprintAlgorithm, String thumbprint, DetailLevel detailLevel, Iterable<BatchClientBehavior> additionalBehaviors) throws BatchErrorException, IOException { CertificateGetOptions getCertificateOptions = new CertificateGetOptions(); BehaviorManager bhMgr = new BehaviorManager(this.customBehaviors(), additionalBehaviors); bhMgr.appendDetailLevelToPerCallBehaviors(detailLevel); bhMgr.applyRequestBehaviors(getCertificateOptions); ServiceResponseWithHeaders<Certificate, CertificateGetHeaders> response = this._parentBatchClient .protocolLayer().certificates().get(thumbprintAlgorithm, thumbprint, getCertificateOptions); return response.getBody(); } /** * Enumerates the {@link Certificate certificates} in the Batch account. * * @return A collection of {@link Certificate certificates} * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public List<Certificate> listCertificates() throws BatchErrorException, IOException { return listCertificates(null, null); } /** * Enumerates the {@link Certificate certificates} in the Batch account. * * @param detailLevel A {@link DetailLevel} used for filtering the list and for controlling which properties are retrieved from the service. * @return A collection of {@link Certificate certificates} * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public List<Certificate> listCertificates(DetailLevel detailLevel) throws BatchErrorException, IOException { return listCertificates(detailLevel, null); } /** * Enumerates the {@link Certificate certificates} in the Batch account. * * @param detailLevel A {@link DetailLevel} used for filtering the list and for controlling which properties are retrieved from the service. * @param additionalBehaviors A collection of {@link BatchClientBehavior} instances that are applied to the Batch service request. * @return A collection of {@link Certificate certificates} * @throws BatchErrorException Exception thrown from REST call * @throws IOException Exception thrown from serialization/deserialization */ public List<Certificate> listCertificates(DetailLevel detailLevel, Iterable<BatchClientBehavior> additionalBehaviors) throws BatchErrorException, IOException { CertificateListOptions certificateListOptions = new CertificateListOptions(); BehaviorManager bhMgr = new BehaviorManager(this.customBehaviors(), additionalBehaviors); bhMgr.appendDetailLevelToPerCallBehaviors(detailLevel); bhMgr.applyRequestBehaviors(certificateListOptions); ServiceResponseWithHeaders<PagedList<Certificate>, CertificateListHeaders> response = this._parentBatchClient .protocolLayer().certificates().list(certificateListOptions); return response.getBody(); } }