/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.intel.mtwilson.tpm.endorsement.client.jaxrs; import com.intel.mtwilson.tpm.endorsement.client.jaxrs.*; import com.intel.mtwilson.jaxrs2.client.MtWilsonClient; import com.intel.mtwilson.tpm.endorsement.model.TpmEndorsement; import com.intel.mtwilson.tpm.endorsement.model.TpmEndorsementCollection; import com.intel.mtwilson.tpm.endorsement.model.TpmEndorsementFilterCriteria; import java.net.URL; import java.util.HashMap; import java.util.Properties; import javax.ws.rs.WebApplicationException; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class TpmEndorsements extends MtWilsonClient { Logger log = LoggerFactory.getLogger(getClass().getName()); public TpmEndorsements(URL url) throws Exception{ super(url); } public TpmEndorsements(Properties properties) throws Exception { super(properties); } /** * Creates an new TpmEndorsement in the system that could be during white listing or host registration for establishing trusted communication channel with the host. * @param hostTpmEndorsement - TpmEndorsement object that needs to be created. * @return Created TpmEndorsement object. * @since Mt.Wilson 2.0 * @mtwRequiresPermissions tpm_endorsements:create * @mtwContentTypeReturned JSON/XML/YAML * @mtwMethodType POST * @mtwSampleRestCall * <pre> * https://server.com:8181/mtwilson/v2/tpm-endorsements * Input: {"issuer":"vcenter1_shared_policy","descriptor":{"policy_type":"certificate-digest","data":["d0 8f 07 b0 5c 6d 78 62 b9 27 48 ff 35 da 27 bf f2 03 b3 c1"], * "meta":{"digest_algorithm":"SHA-1"}},"private":false} * Output: {"id":"3e75091f-4657-496c-a721-8a77931ee9da","issuer":"vcenter1_shared_policy","descriptor":{"policy_type":"certificate-digest", * "data":["d0 8f 07 b0 5c 6d 78 62 b9 27 48 ff 35 da 27 bf f2 03 b3 c1"],"meta":{"digest_algorithm":"SHA-1"}},"private":false} * </pre> * @mtwSampleApiCall * <pre> * // Need to register the extension of the TpmEndorsement being used to authenticate to the MTW server. In the example we are using the Insecure policy. * Extensions.register(TpmEndorsementCreator.class, com.intel.mtwilson.tpm.endorsement.creator.impl.InsecureTpmEndorsementCreator.class); * TpmEndorsements client = new TpmEndorsements(My.configuration().getClientProperties()); * UUID id = new UUID(); * TpmEndorsement tlsPolicy = new TpmEndorsement(); * tlsPolicy.setId(id); * tlsPolicy.setName("vcenter1_shared_policy"); * tlsPolicy.setPrivate(false); * TpmEndorsementDescriptor tlsPolicyDescriptor = new TpmEndorsementDescriptor(); * tlsPolicyDescriptor.setPolicyType("certificate-digest"); * tlsPolicyDescriptor.setData(Arrays.asList("d0 8f 07 b0 5c 6d 78 62 b9 27 48 ff 35 da 27 bf f2 03 b3 c1")); * Map<String, String> metaData = new HashMap<>(); * metaData.put("digest_algorithm","SHA-1"); * tlsPolicyDescriptor.setMeta(metaData); * tlsPolicy.setDescriptor(tlsPolicyDescriptor); * TpmEndorsement createTpmEndorsement = client.createTpmEndorsement(tlsPolicy); * </pre> */ public TpmEndorsement createTpmEndorsement(TpmEndorsement hostTpmEndorsement) { log.debug("target: {}", getTarget().getUri().toString()); TpmEndorsement newObj = getTarget().path("tpm-endorsements").request().accept(MediaType.APPLICATION_JSON).post(Entity.json(hostTpmEndorsement), TpmEndorsement.class); return newObj; } /** * Deletes the TpmEndorsement with the specified UUID from the system. If the policy is associated with any of the registered hosts, then unless a new TLS policy * is associated with the host, no communication with happen with the host. * @param uuid - UUID of the TpmEndorsement that has to be deleted. * @since Mt.Wilson 2.0 * @mtwRequiresPermissions tpm_endorsements:delete * @mtwContentTypeReturned N/A * @mtwMethodType DELETE * @mtwSampleRestCall * <pre> * https://server.com:8181/mtwilson/v2/tpm-endorsements/3e75091f-4657-496c-a721-8a77931ee9da * </pre> * @mtwSampleApiCall * <pre> * // Need to register the extension of the TpmEndorsement being used to authenticate to the MTW server. In the example we are using the Insecure policy. * Extensions.register(TpmEndorsementCreator.class, com.intel.mtwilson.tpm.endorsement.creator.impl.InsecureTpmEndorsementCreator.class); * TpmEndorsements client = new TpmEndorsements(My.configuration().getClientProperties()); * client.deleteTpmEndorsement("3e75091f-4657-496c-a721-8a77931ee9da"); * </pre> */ public void deleteTpmEndorsement(String uuid) { log.debug("target: {}", getTarget().getUri().toString()); HashMap<String,Object> map = new HashMap<>(); map.put("id", uuid); Response obj = getTarget().path("tpm-endorsements/{id}").resolveTemplates(map).request(MediaType.APPLICATION_JSON).delete(); if( !obj.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL)) { throw new WebApplicationException("Delete TpmEndorsement failed"); } } /** * Deletes the TpmEndorsement(s) matching the specified search criteria. * @param criteria TpmEndorsementFilterCriteria object specifying the search criteria. The search options include * id, hardwareUuid, issuerEqualTo, issuerContains, revokedEqualTo, commentEqualTo and commentContains. * @since Mt.Wilson 2.0 * @mtwRequiresPermissions tpm_endorsements:delete,search * @mtwContentTypeReturned N/A * @mtwMethodType DELETE * @mtwSampleRestCall * <pre> * https://server.com:8181/mtwilson/v2/tpm-endorsements?revokedEqualTo=false * </pre> * @mtwSampleApiCall * <pre> * TpmEndorsements client = new TpmEndorsements(My.configuration().getClientProperties()); * TpmEndorsementFilterCriteria criteria = new TpmEndorsementFilterCriteria(); * criteria.revokedEqualTo = false; * client.deleteTpmEndorsement(criteria); * </pre> */ public void deleteTpmEndorsement(TpmEndorsementFilterCriteria criteria) { log.debug("target: {}", getTarget().getUri().toString()); Response obj = getTargetPathWithQueryParams("tpm-endorsements", criteria).request(MediaType.APPLICATION_JSON).delete(); if( !obj.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL)) { throw new WebApplicationException("Delete TpmEndorsement by search criteria failed"); } } /** * Updates the details of the TpmEndorsement in the system. All the details of the existing TlsPolciy can be updated. * @param tlsPolicy - TpmEndorsement object details that needs to be updated. * @return Updated TpmEndorsement object. * @since Mt.Wilson 2.0 * @mtwRequiresPermissions tpm_endorsements:store * @mtwContentTypeReturned JSON/XML/YAML * @mtwMethodType PUT * @mtwSampleRestCall * <pre> * https://server.com:8181/mtwilson/v2/tpm-endorsements/3e75091f-4657-496c-a721-8a77931ee9da * Input: * Output: * </pre> * @mtwSampleApiCall * <pre> * TpmEndorsements client = new TpmEndorsements(My.configuration().getClientProperties()); * TpmEndorsement currentTpmEndorsement = client.retrieveTpmEndorsement("3e75091f-4657-496c-a721-8a77931ee9da"); * currentTpmEndorsement.setComment("Updated with comments"); * client.editTpmEndorsement(currentTpmEndorsement); * </pre> */ public TpmEndorsement editTpmEndorsement(TpmEndorsement tlsPolicy) { log.debug("target: {}", getTarget().getUri().toString()); HashMap<String,Object> map = new HashMap<>(); map.put("id", tlsPolicy.getId().toString()); TpmEndorsement updatedObj = getTarget().path("tpm-endorsements/{id}").resolveTemplates(map).request().accept(MediaType.APPLICATION_JSON).put(Entity.json(tlsPolicy), TpmEndorsement.class); return updatedObj; } /** * Retrieves the details of the existing TpmEndorsement object with the specified UUID * @param uuid - UUID of the TpmEndorsement to be retrieved * @return TpmEndorsement object matching the specified UUID. * @since Mt.Wilson 2.0 * @mtwRequiresPermissions tpm_endorsements:retrieve * @mtwContentTypeReturned JSON/XML/YAML * @mtwMethodType GET * @mtwSampleRestCall * <pre> * https://server.com:8181/mtwilson/v2/tpm-endorsements/3e75091f-4657-496c-a721-8a77931ee9da * Output: * </pre> * @mtwSampleApiCall * <pre> * TpmEndorsements client = new TpmEndorsements(My.configuration().getClientProperties()); * TpmEndorsement currentTpmEndorsement = client.retrieveTpmEndorsement("3e75091f-4657-496c-a721-8a77931ee9da"); * </pre> */ public TpmEndorsement retrieveTpmEndorsement(String uuid) { log.debug("target: {}", getTarget().getUri().toString()); HashMap<String,Object> map = new HashMap<>(); map.put("id", uuid); TpmEndorsement obj = getTarget().path("tpm-endorsements/{id}").resolveTemplates(map).request(MediaType.APPLICATION_JSON).get(TpmEndorsement.class); return obj; } /** * Searches for the TLS policies with the specified set of criteria. * @param criteria TpmEndorsementFilterCriteria object specifying the filter criteria. The search options include * id, hardwareUuid, issuerEqualTo, issuerContains, revokedEqualTo, commentEqualTo and commentContains. * Also, if the caller wants to retrieve the list of all the registered * roles, the filter option can be disabled by setting the filter criteria to false. By default * the filter criteria is true. [Ex: /v2/tpm-endorsements?filter=false retrieves the list of all the TpmEndorsements] * @return TpmEndorsementCollection with the TpmEndorsements that meet the specified filter criteria * @since Mt.Wilson 2.0 * @mtwRequiresPermissions tpm_endorsements:search * @mtwContentTypeReturned JSON/XML/YAML * @mtwMethodType GET * @mtwSampleRestCall * <pre> * https://server.com:8181/mtwilson/v2/tpm-endorsements?filter=false * Output: * </pre> * @mtwSampleApiCall * <pre> * TpmEndorsementFilterCriteria criteria = new TpmEndorsementFilterCriteria(); * criteria.revokedEqualTo = false; * TpmEndorsementCollection searchTpmEndorsements = client.searchTpmEndorsements(criteria); * </pre> */ public TpmEndorsementCollection searchTpmEndorsements(TpmEndorsementFilterCriteria criteria) { log.debug("target: {}", getTarget().getUri().toString()); TpmEndorsementCollection objList = getTargetPathWithQueryParams("tpm-endorsements", criteria).request(MediaType.APPLICATION_JSON).get(TpmEndorsementCollection.class); return objList; } }