Search in sources :

Example 36 with Principal

use of org.candlepin.auth.Principal in project candlepin by candlepin.

the class OwnerResource method listPools.

/**
 * Retrieves a list of Pools for an Owner
 *
 * @param ownerKey id of the owner whose entitlement pools are sought.
 * @param matches Find pools matching the given pattern in a variety of fields.
 * * and ? wildcards are supported.
 * @return a list of Pool objects
 * @httpcode 400
 * @httpcode 404
 * @httpcode 200
 */
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("{owner_key}/pools")
@SuppressWarnings("checkstyle:indentation")
@ApiOperation(notes = "Retrieves a list of Pools for an Owner", value = "List Pools")
@ApiResponses({ @ApiResponse(code = 404, message = "Owner not found"), @ApiResponse(code = 400, message = "Invalid request") })
public List<PoolDTO> listPools(@PathParam("owner_key") @Verify(value = Owner.class, subResource = SubResource.POOLS) String ownerKey, @QueryParam("consumer") String consumerUuid, @QueryParam("activation_key") String activationKeyName, @QueryParam("product") String productId, @QueryParam("subscription") String subscriptionId, @ApiParam("Include pools that are not suited to the unit's facts.") @QueryParam("listall") @DefaultValue("false") boolean listAll, @ApiParam("Date to use as current time for lookup criteria. Defaults" + " to current date if not specified.") @QueryParam("activeon") @DefaultValue(DateFormat.NOW) @DateFormat Date activeOn, @ApiParam("Find pools matching the given pattern in a variety of fields;" + " * and ? wildcards are supported; may be specified multiple times") @QueryParam("matches") List<String> matches, @ApiParam("The attributes to return based on the specified types.") @QueryParam("attribute") @CandlepinParam(type = KeyValueParameter.class) List<KeyValueParameter> attrFilters, @ApiParam("When set to true, it will add future dated pools to the result, " + "based on the activeon date.") @QueryParam("add_future") @DefaultValue("false") boolean addFuture, @ApiParam("When set to true, it will return only future dated pools to the result, " + "based on the activeon date.") @QueryParam("only_future") @DefaultValue("false") boolean onlyFuture, @ApiParam("Will only return pools with a start date after the supplied date. " + "Overrides the activeOn date.") @QueryParam("after") @DateFormat Date after, @ApiParam("One or more pool IDs to use to filter the output; only pools with IDs matching " + "those provided will be returned; may be specified multiple times") @QueryParam("poolid") List<String> poolIds, @Context Principal principal, @Context PageRequest pageRequest) {
    Owner owner = findOwnerByKey(ownerKey);
    Consumer c = null;
    if (consumerUuid != null) {
        c = consumerCurator.findByUuid(consumerUuid);
        if (c == null) {
            throw new NotFoundException(i18n.tr("Unit: {0} not found", consumerUuid));
        }
        if (!c.getOwnerId().equals(owner.getId())) {
            throw new BadRequestException("Consumer specified does not belong to owner on path");
        }
        if (!principal.canAccess(c, SubResource.NONE, Access.READ_ONLY)) {
            throw new ForbiddenException(i18n.tr("User {0} cannot access consumer {1}", principal.getPrincipalName(), c.getUuid()));
        }
    }
    ActivationKey key = null;
    if (activationKeyName != null) {
        key = activationKeyCurator.lookupForOwner(activationKeyName, owner);
        if (key == null) {
            throw new BadRequestException(i18n.tr("ActivationKey with id {0} could not be found.", activationKeyName));
        }
    }
    if (addFuture && onlyFuture) {
        throw new BadRequestException(i18n.tr("The flags add_future and only_future cannot be used at the same time."));
    }
    if (after != null && (addFuture || onlyFuture)) {
        throw new BadRequestException(i18n.tr("The flags add_future and only_future cannot be used with the parameter after."));
    }
    if (after != null) {
        activeOn = null;
    }
    // Process the filters passed for the attributes
    PoolFilterBuilder poolFilters = new PoolFilterBuilder();
    for (KeyValueParameter filterParam : attrFilters) {
        poolFilters.addAttributeFilter(filterParam.key(), filterParam.value());
    }
    if (matches != null) {
        matches.stream().filter(elem -> elem != null && !elem.isEmpty()).forEach(elem -> poolFilters.addMatchesFilter(elem));
    }
    if (poolIds != null && !poolIds.isEmpty()) {
        poolFilters.addIdFilters(poolIds);
    }
    Page<List<Pool>> page = poolManager.listAvailableEntitlementPools(c, key, owner.getId(), productId, subscriptionId, activeOn, listAll, poolFilters, pageRequest, addFuture, onlyFuture, after);
    List<Pool> poolList = page.getPageData();
    calculatedAttributesUtil.setCalculatedAttributes(poolList, activeOn);
    calculatedAttributesUtil.setQuantityAttributes(poolList, c, activeOn);
    // Store the page for the LinkHeaderResponseFilter
    ResteasyProviderFactory.pushContext(Page.class, page);
    List<PoolDTO> poolDTOs = new ArrayList<>();
    for (Pool pool : poolList) {
        poolDTOs.add(translator.translate(pool, PoolDTO.class));
    }
    return poolDTOs;
}
Also used : StringUtils(org.apache.commons.lang.StringUtils) Arrays(java.util.Arrays) Produces(javax.ws.rs.Produces) ApiParam(io.swagger.annotations.ApiParam) CalculatedAttributesUtil(org.candlepin.resource.util.CalculatedAttributesUtil) EventSink(org.candlepin.audit.EventSink) MediaType(javax.ws.rs.core.MediaType) ImportRecordCurator(org.candlepin.model.ImportRecordCurator) PageRequest(org.candlepin.common.paging.PageRequest) ImporterException(org.candlepin.sync.ImporterException) ExporterMetadataCurator(org.candlepin.model.ExporterMetadataCurator) ActivationKeyCurator(org.candlepin.model.activationkeys.ActivationKeyCurator) ForbiddenException(org.candlepin.common.exceptions.ForbiddenException) DateFormat(org.candlepin.resteasy.DateFormat) HealEntireOrgJob(org.candlepin.pinsetter.tasks.HealEntireOrgJob) EventCurator(org.candlepin.model.EventCurator) Feed(org.jboss.resteasy.plugins.providers.atom.Feed) ActivationKeyDTO(org.candlepin.dto.api.v1.ActivationKeyDTO) SyncDataFormatException(org.candlepin.sync.SyncDataFormatException) ResourceMovedException(org.candlepin.common.exceptions.ResourceMovedException) UeberCertificateCurator(org.candlepin.model.UeberCertificateCurator) Set(java.util.Set) PoolManager(org.candlepin.controller.PoolManager) Access(org.candlepin.auth.Access) IseException(org.candlepin.common.exceptions.IseException) Type(org.candlepin.audit.Event.Type) OwnerServiceAdapter(org.candlepin.service.OwnerServiceAdapter) PoolDTO(org.candlepin.dto.api.v1.PoolDTO) Util(org.candlepin.util.Util) I18n(org.xnap.commons.i18n.I18n) Event(org.candlepin.audit.Event) Subscription(org.candlepin.model.dto.Subscription) GET(javax.ws.rs.GET) RefreshPoolsJob(org.candlepin.pinsetter.tasks.RefreshPoolsJob) KeyValueParameter(org.candlepin.resteasy.parameter.KeyValueParameter) ContentAccessCertServiceAdapter(org.candlepin.service.ContentAccessCertServiceAdapter) EventDTO(org.candlepin.dto.api.v1.EventDTO) ArrayList(java.util.ArrayList) ResteasyProviderFactory(org.jboss.resteasy.spi.ResteasyProviderFactory) Target(org.candlepin.audit.Event.Target) Entitlement(org.candlepin.model.Entitlement) StringTokenizer(java.util.StringTokenizer) Branding(org.candlepin.model.Branding) Api(io.swagger.annotations.Api) UpstreamConsumerDTO(org.candlepin.dto.api.v1.UpstreamConsumerDTO) UeberCertificateGenerator(org.candlepin.model.UeberCertificateGenerator) CandlepinException(org.candlepin.common.exceptions.CandlepinException) OwnerInfo(org.candlepin.model.OwnerInfo) ModelTranslator(org.candlepin.dto.ModelTranslator) ExporterMetadata(org.candlepin.model.ExporterMetadata) ServiceLevelValidator(org.candlepin.util.ServiceLevelValidator) Wrapped(org.jboss.resteasy.annotations.providers.jaxb.Wrapped) IOException(java.io.IOException) CandlepinQuery(org.candlepin.model.CandlepinQuery) File(java.io.File) EntitlementCurator(org.candlepin.model.EntitlementCurator) UndoImportsJob(org.candlepin.pinsetter.tasks.UndoImportsJob) CandlepinParam(org.candlepin.resteasy.parameter.CandlepinParam) ApiResponse(io.swagger.annotations.ApiResponse) ImportRecord(org.candlepin.model.ImportRecord) ActivationKey(org.candlepin.model.activationkeys.ActivationKey) EnvironmentDTO(org.candlepin.dto.api.v1.EnvironmentDTO) Date(java.util.Date) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) Path(javax.ws.rs.Path) MultipartInput(org.jboss.resteasy.plugins.providers.multipart.MultipartInput) EntitlementFinderUtil(org.candlepin.resource.util.EntitlementFinderUtil) EntitlementFilterBuilder(org.candlepin.model.EntitlementFilterBuilder) ConflictOverrides(org.candlepin.sync.ConflictOverrides) ActivationKeyContentOverride(org.candlepin.model.activationkeys.ActivationKeyContentOverride) Transactional(com.google.inject.persist.Transactional) OwnerDTO(org.candlepin.dto.api.v1.OwnerDTO) ConflictException(org.candlepin.common.exceptions.ConflictException) ApiOperation(io.swagger.annotations.ApiOperation) InputPart(org.jboss.resteasy.plugins.providers.multipart.InputPart) QueryParam(javax.ws.rs.QueryParam) Consumes(javax.ws.rs.Consumes) ConsumerTypeCurator(org.candlepin.model.ConsumerTypeCurator) DefaultValue(javax.ws.rs.DefaultValue) ContentOverrideValidator(org.candlepin.util.ContentOverrideValidator) Product(org.candlepin.model.Product) DELETE(javax.ws.rs.DELETE) NotFoundException(org.candlepin.common.exceptions.NotFoundException) UpstreamConsumer(org.candlepin.model.UpstreamConsumer) Context(javax.ws.rs.core.Context) OwnerManager(org.candlepin.controller.OwnerManager) ConstraintViolationException(org.hibernate.exception.ConstraintViolationException) EventAdapter(org.candlepin.audit.EventAdapter) GenericType(org.jboss.resteasy.util.GenericType) Page(org.candlepin.common.paging.Page) OwnerCurator(org.candlepin.model.OwnerCurator) EntitlementDTO(org.candlepin.dto.api.v1.EntitlementDTO) OwnerProductCurator(org.candlepin.model.OwnerProductCurator) ManifestFileServiceException(org.candlepin.sync.file.ManifestFileServiceException) ConsumerCurator(org.candlepin.model.ConsumerCurator) List(java.util.List) PersistenceException(javax.persistence.PersistenceException) ProductCurator(org.candlepin.model.ProductCurator) SourceSubscription(org.candlepin.model.SourceSubscription) PathParam(javax.ws.rs.PathParam) ConsumerDTO(org.candlepin.dto.api.v1.ConsumerDTO) Release(org.candlepin.model.Release) Verify(org.candlepin.auth.Verify) ManifestManager(org.candlepin.controller.ManifestManager) ConsumerType(org.candlepin.model.ConsumerType) PoolFilterBuilder(org.candlepin.model.PoolFilterBuilder) ApiResponses(io.swagger.annotations.ApiResponses) ConfigProperties(org.candlepin.config.ConfigProperties) Pool(org.candlepin.model.Pool) UeberCertificate(org.candlepin.model.UeberCertificate) HashSet(java.util.HashSet) SubResource(org.candlepin.auth.SubResource) PoolType(org.candlepin.model.Pool.PoolType) Owner(org.candlepin.model.Owner) CollectionUtils(org.apache.commons.collections.CollectionUtils) BadRequestException(org.candlepin.common.exceptions.BadRequestException) BrandingDTO(org.candlepin.dto.api.v1.BrandingDTO) Environment(org.candlepin.model.Environment) Principal(org.candlepin.auth.Principal) LinkedList(java.util.LinkedList) Configuration(org.candlepin.common.config.Configuration) JobDetail(org.quartz.JobDetail) OwnerInfoCurator(org.candlepin.model.OwnerInfoCurator) ResolverUtil(org.candlepin.resource.util.ResolverUtil) Logger(org.slf4j.Logger) POST(javax.ws.rs.POST) EnvironmentCurator(org.candlepin.model.EnvironmentCurator) ConsumerTypeValidator(org.candlepin.resource.util.ConsumerTypeValidator) EventFactory(org.candlepin.audit.EventFactory) MultivaluedMap(javax.ws.rs.core.MultivaluedMap) ImportJob(org.candlepin.pinsetter.tasks.ImportJob) Level(ch.qos.logback.classic.Level) EntitlementCertificateCurator(org.candlepin.model.EntitlementCertificateCurator) PUT(javax.ws.rs.PUT) Consumer(org.candlepin.model.Consumer) Authorization(io.swagger.annotations.Authorization) Collections(java.util.Collections) ArrayUtils(org.apache.commons.lang.ArrayUtils) Owner(org.candlepin.model.Owner) ForbiddenException(org.candlepin.common.exceptions.ForbiddenException) ArrayList(java.util.ArrayList) NotFoundException(org.candlepin.common.exceptions.NotFoundException) PoolDTO(org.candlepin.dto.api.v1.PoolDTO) ActivationKey(org.candlepin.model.activationkeys.ActivationKey) UpstreamConsumer(org.candlepin.model.UpstreamConsumer) Consumer(org.candlepin.model.Consumer) BadRequestException(org.candlepin.common.exceptions.BadRequestException) PoolFilterBuilder(org.candlepin.model.PoolFilterBuilder) KeyValueParameter(org.candlepin.resteasy.parameter.KeyValueParameter) ArrayList(java.util.ArrayList) List(java.util.List) LinkedList(java.util.LinkedList) Pool(org.candlepin.model.Pool) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Example 37 with Principal

use of org.candlepin.auth.Principal in project candlepin by candlepin.

the class UndoImportsJob method toExecute.

/**
 * {@inheritDoc}
 *
 * Executes {@link PoolManager#refreshPools(org.candlepin.model.Owner)}
 * as a pinsetter job.
 *
 * @param context the job's execution context
 */
@Transactional
public void toExecute(JobExecutionContext context) throws JobExecutionException {
    try {
        JobDataMap map = context.getMergedJobDataMap();
        String ownerId = map.getString(JobStatus.TARGET_ID);
        String ownerKey = map.getString(OWNER_KEY);
        Owner owner = this.ownerCurator.lockAndLoadById(ownerId);
        Boolean lazy = map.getBoolean(LAZY_REGEN);
        Principal principal = (Principal) map.get(PinsetterJobListener.PRINCIPAL_KEY);
        if (owner == null) {
            log.debug("Owner no longer exists: {}", ownerKey);
            context.setResult("Nothing to do; owner no longer exists: " + ownerKey);
            return;
        }
        String displayName = owner.getDisplayName();
        // Remove imports
        ExporterMetadata metadata = this.exportCurator.lookupByTypeAndOwner(ExporterMetadata.TYPE_PER_USER, owner);
        if (metadata == null) {
            log.debug("No imports exist for owner {}", displayName);
            context.setResult("Nothing to do; imports no longer exist for owner: " + displayName);
            return;
        }
        log.info("Deleting all pools originating from manifests for owner/org: {}", displayName);
        List<Pool> pools = this.poolManager.listPoolsByOwner(owner).list();
        for (Pool pool : pools) {
            if (this.poolManager.isManaged(pool)) {
                this.poolManager.deletePool(pool);
            }
        }
        // Clear out upstream ID so owner can import from other distributors:
        UpstreamConsumer uc = owner.getUpstreamConsumer();
        owner.setUpstreamConsumer(null);
        this.exportCurator.delete(metadata);
        this.recordManifestDeletion(owner, principal.getUsername(), uc);
        context.setResult("Imported pools removed for owner " + displayName);
    } catch (PersistenceException e) {
        throw new RetryJobException("UndoImportsJob encountered a problem.", e);
    } catch (RuntimeException e) {
        Throwable cause = e.getCause();
        while (cause != null) {
            if (SQLException.class.isAssignableFrom(cause.getClass())) {
                log.warn("Caught a runtime exception wrapping an SQLException.");
                throw new RetryJobException("UndoImportsJob encountered a problem.", e);
            }
            cause = cause.getCause();
        }
        // Otherwise throw as we would normally for any generic Exception:
        log.error("UndoImportsJob encountered a problem.", e);
        context.setResult(e.getMessage());
        throw new JobExecutionException(e.getMessage(), e, false);
    }// cleaned up on failure.
     catch (Exception e) {
        log.error("UndoImportsJob encountered a problem.", e);
        context.setResult(e.getMessage());
        throw new JobExecutionException(e.getMessage(), e, false);
    }
}
Also used : JobDataMap(org.quartz.JobDataMap) Owner(org.candlepin.model.Owner) SQLException(java.sql.SQLException) ExporterMetadata(org.candlepin.model.ExporterMetadata) UpstreamConsumer(org.candlepin.model.UpstreamConsumer) ImportUpstreamConsumer(org.candlepin.model.ImportUpstreamConsumer) RetryJobException(org.candlepin.pinsetter.core.RetryJobException) SQLException(java.sql.SQLException) JobExecutionException(org.quartz.JobExecutionException) PersistenceException(javax.persistence.PersistenceException) RetryJobException(org.candlepin.pinsetter.core.RetryJobException) JobExecutionException(org.quartz.JobExecutionException) PersistenceException(javax.persistence.PersistenceException) Pool(org.candlepin.model.Pool) Principal(org.candlepin.auth.Principal) Transactional(com.google.inject.persist.Transactional)

Example 38 with Principal

use of org.candlepin.auth.Principal in project candlepin by candlepin.

the class OwnerInfoCuratorTest method setupOnlyMyConsumersPrincipal.

private User setupOnlyMyConsumersPrincipal() {
    Set<Permission> perms = new HashSet<>();
    User u = new User("MySystemsAdmin", "passwd");
    perms.add(new UsernameConsumersPermission(u, owner));
    Principal p = new UserPrincipal(u.getUsername(), perms, false);
    setupPrincipal(p);
    return u;
}
Also used : UsernameConsumersPermission(org.candlepin.auth.permissions.UsernameConsumersPermission) UsernameConsumersPermission(org.candlepin.auth.permissions.UsernameConsumersPermission) Permission(org.candlepin.auth.permissions.Permission) UserPrincipal(org.candlepin.auth.UserPrincipal) Principal(org.candlepin.auth.Principal) UserPrincipal(org.candlepin.auth.UserPrincipal) HashSet(java.util.HashSet)

Example 39 with Principal

use of org.candlepin.auth.Principal in project candlepin by candlepin.

the class OwnerResourceTest method testCreateUeberCertificateRegenerate.

@Test
public void testCreateUeberCertificateRegenerate() {
    Principal principal = setupPrincipal(owner, Access.ALL);
    Owner owner = TestUtil.createOwner();
    UeberCertificate entCert = mock(UeberCertificate.class);
    OwnerCurator oc = mock(OwnerCurator.class);
    ProductCurator pc = mock(ProductCurator.class);
    ConsumerCurator cc = mock(ConsumerCurator.class);
    EntitlementCurator ec = mock(EntitlementCurator.class);
    CandlepinPoolManager cpm = mock(CandlepinPoolManager.class);
    EntitlementCertificateCurator ecc = mock(EntitlementCertificateCurator.class);
    UeberCertificateCurator uc = mock(UeberCertificateCurator.class);
    UeberCertificateGenerator ucg = mock(UeberCertificateGenerator.class);
    OwnerResource resource = new OwnerResource(oc, pc, null, cc, i18n, null, null, null, null, null, cpm, null, null, null, null, null, ecc, ec, uc, ucg, null, null, null, null, null, null, null, null, null, this.modelTranslator);
    when(ucg.generate(eq(owner.getKey()), eq(principal))).thenReturn(entCert);
    UeberCertificate result = resource.createUeberCertificate(principal, owner.getKey());
    assertEquals(entCert, result);
}
Also used : EntitlementCurator(org.candlepin.model.EntitlementCurator) OwnerCurator(org.candlepin.model.OwnerCurator) Owner(org.candlepin.model.Owner) UeberCertificate(org.candlepin.model.UeberCertificate) ProductCurator(org.candlepin.model.ProductCurator) UeberCertificateCurator(org.candlepin.model.UeberCertificateCurator) EntitlementCertificateCurator(org.candlepin.model.EntitlementCertificateCurator) UeberCertificateGenerator(org.candlepin.model.UeberCertificateGenerator) ConsumerPrincipal(org.candlepin.auth.ConsumerPrincipal) UserPrincipal(org.candlepin.auth.UserPrincipal) Principal(org.candlepin.auth.Principal) ConsumerCurator(org.candlepin.model.ConsumerCurator) CandlepinPoolManager(org.candlepin.controller.CandlepinPoolManager) Test(org.junit.Test)

Example 40 with Principal

use of org.candlepin.auth.Principal in project candlepin by candlepin.

the class OwnerResourceTest method testCanFilterOutDevPoolsByAttribute.

@Test
public void testCanFilterOutDevPoolsByAttribute() throws Exception {
    Principal principal = setupPrincipal(owner, Access.ALL);
    Product p = this.createProduct(owner);
    Pool pool1 = TestUtil.createPool(owner, p);
    pool1.setAttribute(Pool.Attributes.DEVELOPMENT_POOL, "true");
    poolCurator.create(pool1);
    Product p2 = this.createProduct(owner);
    Pool pool2 = TestUtil.createPool(owner, p2);
    poolCurator.create(pool2);
    List<KeyValueParameter> params = new ArrayList<>();
    List<PoolDTO> pools = ownerResource.listPools(owner.getKey(), null, null, null, null, true, null, null, params, false, false, null, null, principal, null);
    assertEquals(2, pools.size());
    params = new ArrayList<>();
    params.add(createKeyValueParam(Pool.Attributes.DEVELOPMENT_POOL, "!true"));
    pools = ownerResource.listPools(owner.getKey(), null, null, null, null, true, null, null, params, false, false, null, null, principal, null);
    assertEquals(1, pools.size());
    assertModelEqualsDTO(pool2, pools.get(0));
}
Also used : ArrayList(java.util.ArrayList) Product(org.candlepin.model.Product) KeyValueParameter(org.candlepin.resteasy.parameter.KeyValueParameter) PoolDTO(org.candlepin.dto.api.v1.PoolDTO) Pool(org.candlepin.model.Pool) ConsumerPrincipal(org.candlepin.auth.ConsumerPrincipal) UserPrincipal(org.candlepin.auth.UserPrincipal) Principal(org.candlepin.auth.Principal) Test(org.junit.Test)

Aggregations

Principal (org.candlepin.auth.Principal)74 Test (org.junit.Test)54 UserPrincipal (org.candlepin.auth.UserPrincipal)40 NoAuthPrincipal (org.candlepin.auth.NoAuthPrincipal)20 ConsumerPrincipal (org.candlepin.auth.ConsumerPrincipal)17 ConsumerDTO (org.candlepin.dto.api.v1.ConsumerDTO)15 Consumer (org.candlepin.model.Consumer)15 Owner (org.candlepin.model.Owner)15 TrustedUserPrincipal (org.candlepin.auth.TrustedUserPrincipal)14 Date (java.util.Date)12 ConsumerType (org.candlepin.model.ConsumerType)11 HashSet (java.util.HashSet)10 Pool (org.candlepin.model.Pool)10 JobDetail (org.quartz.JobDetail)10 Method (java.lang.reflect.Method)9 Permission (org.candlepin.auth.permissions.Permission)9 JobDataMap (org.quartz.JobDataMap)9 CandlepinQuery (org.candlepin.model.CandlepinQuery)8 File (java.io.File)7 FileInputStream (java.io.FileInputStream)7