Search in sources :

Example 1 with TransitionQuery

use of org.opencastproject.authorization.xacml.manager.api.TransitionQuery in project opencast by opencast.

the class AbstractAclServiceRestEndpoint method getTransitionsAsJson.

@GET
@Path("/transitions.json")
@Produces(MediaType.APPLICATION_JSON)
@RestQuery(name = "gettransitionsasjson", description = "Get the transitions as json", returnDescription = "Get the transitions as json", restParameters = { @RestParameter(name = "after", isRequired = false, description = "All transitions with an application date after this one", type = STRING), @RestParameter(name = "before", isRequired = false, description = "All transitions with an application date before this one", type = STRING), @RestParameter(name = "scope", isRequired = false, description = "The transition scope", type = STRING), @RestParameter(name = "id", isRequired = false, description = "The series or episode identifier", type = STRING), @RestParameter(name = "transitionId", isRequired = false, description = "The transition identifier", type = STRING), @RestParameter(name = "managedAclId", isRequired = false, description = "The managed acl identifier", type = INTEGER), @RestParameter(name = "done", isRequired = false, description = "Indicates if already applied", type = BOOLEAN) }, reponses = { @RestResponse(responseCode = SC_OK, description = "The request was processed succesfully"), @RestResponse(responseCode = SC_BAD_REQUEST, description = "Error parsing the given scope"), @RestResponse(responseCode = SC_INTERNAL_SERVER_ERROR, description = "Error during processing the request") })
public Response getTransitionsAsJson(@QueryParam("after") String afterStr, @QueryParam("before") String beforeStr, @QueryParam("scope") String scopeStr, @QueryParam("id") String id, @QueryParam("transitionId") Long transitionId, @QueryParam("managedAclId") Long managedAclId, @QueryParam("done") Boolean done) {
    try {
        final TransitionQuery query = TransitionQuery.query();
        if (StringUtils.isNotBlank(afterStr))
            query.after(new Date(DateTimeSupport.fromUTC(afterStr)));
        if (StringUtils.isNotBlank(beforeStr))
            query.before(new Date(DateTimeSupport.fromUTC(beforeStr)));
        if (StringUtils.isNotBlank(id))
            query.withId(id);
        if (StringUtils.isNotBlank(scopeStr)) {
            if ("episode".equalsIgnoreCase(scopeStr))
                query.withScope(AclScope.Episode);
            else if ("series".equalsIgnoreCase(scopeStr))
                query.withScope(AclScope.Series);
            else
                return badRequest();
        }
        if (transitionId != null)
            query.withTransitionId(transitionId);
        if (managedAclId != null)
            query.withAclId(managedAclId);
        if (done != null)
            query.withDone(done);
        final AclService aclService = aclService();
        // run query
        final TransitionResult r = aclService().getTransitions(query);
        // episodeId -> [transitions]
        final Map<String, List<EpisodeACLTransition>> episodeGroup = groupByEpisodeId(r.getEpisodeTransistions());
        // seriesId -> [transitions]
        final Map<String, List<SeriesACLTransition>> seriesGroup = groupBySeriesId(r.getSeriesTransistions());
        final Jsons.Obj episodesObj = buildEpisodesObj(episodeGroup);
        final Jsons.Obj seriesObj = buildSeriesObj(seriesGroup);
        // create final response
        return ok(obj(p("episodes", episodesObj), p("series", seriesObj)).toJson());
    } catch (Exception e) {
        logger.error("Error generating getTransitions response", e);
        return serverError();
    }
}
Also used : Jsons(org.opencastproject.util.Jsons) TransitionQuery(org.opencastproject.authorization.xacml.manager.api.TransitionQuery) JsonConv.fullAccessControlList(org.opencastproject.authorization.xacml.manager.endpoint.JsonConv.fullAccessControlList) List(java.util.List) AccessControlList(org.opencastproject.security.api.AccessControlList) AclService(org.opencastproject.authorization.xacml.manager.api.AclService) TransitionResult(org.opencastproject.authorization.xacml.manager.api.TransitionResult) Date(java.util.Date) AclTransitionDbDuplicatedException(org.opencastproject.authorization.xacml.manager.impl.AclTransitionDbDuplicatedException) SeriesException(org.opencastproject.series.api.SeriesException) WebApplicationException(javax.ws.rs.WebApplicationException) AclServiceException(org.opencastproject.authorization.xacml.manager.api.AclServiceException) AclServiceNoReferenceException(org.opencastproject.authorization.xacml.manager.api.AclServiceNoReferenceException) NotFoundException(org.opencastproject.util.NotFoundException) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) RestQuery(org.opencastproject.util.doc.rest.RestQuery)

Example 2 with TransitionQuery

use of org.opencastproject.authorization.xacml.manager.api.TransitionQuery in project opencast by opencast.

the class OsgiJpaAclTransitionDbTest method testGetByQuery.

@Test
public void testGetByQuery() throws Exception {
    final ManagedAcl macl = createAcl();
    SeriesACLTransition st1 = db.storeSeriesAclTransition(ORG, "uuid-series", new Date(1347000000000L), macl.getId(), true, Option.<ConfiguredWorkflowRef>none());
    SeriesACLTransition st2 = db.storeSeriesAclTransition(ORG, "uuid-series", new Date(1347000900000L), macl.getId(), false, Option.<ConfiguredWorkflowRef>none());
    SeriesACLTransition st3 = db.storeSeriesAclTransition(ORG, "uuid-series2", new Date(1347000030000L), macl.getId(), false, option(workflow("full")));
    SeriesACLTransition st4 = db.markSeriesTransitionAsCompleted(ORG, st3.getTransitionId());
    EpisodeACLTransition et1 = db.storeEpisodeAclTransition(ORG, "uuid-episode", new Date(1347005303736L), Option.<Long>none(), Option.<ConfiguredWorkflowRef>none());
    EpisodeACLTransition et2 = db.storeEpisodeAclTransition(ORG, "uuid-episode", new Date(1347005343736L), some(macl.getId()), Option.<ConfiguredWorkflowRef>none());
    EpisodeACLTransition et3 = db.storeEpisodeAclTransition(ORG, "uuid-episode2", new Date(1347005343736L), some(macl.getId()), option(workflow("full")));
    EpisodeACLTransition et4 = db.markEpisodeTransitionAsCompleted(ORG, et3.getTransitionId());
    // Test All
    TransitionQuery query = TransitionQuery.query();
    TransitionResult result = db.getByQuery(ORG, query);
    assertEquals(3, result.getEpisodeTransistions().size());
    assertEquals(3, result.getSeriesTransistions().size());
    assertEquals(et1.getTransitionId(), result.getEpisodeTransistions().get(0).getTransitionId());
    assertEquals(et2.getTransitionId(), result.getEpisodeTransistions().get(1).getTransitionId());
    assertEquals(et4.getTransitionId(), result.getEpisodeTransistions().get(2).getTransitionId());
    assertEquals(st1.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
    assertEquals(st4.getTransitionId(), result.getSeriesTransistions().get(1).getTransitionId());
    assertEquals(st2.getTransitionId(), result.getSeriesTransistions().get(2).getTransitionId());
    // Test Episode
    query.withScope(AclScope.Episode);
    result = db.getByQuery(ORG, query);
    assertEquals(3, result.getEpisodeTransistions().size());
    assertEquals(0, result.getSeriesTransistions().size());
    assertEquals(et1.getTransitionId(), result.getEpisodeTransistions().get(0).getTransitionId());
    assertEquals(et2.getTransitionId(), result.getEpisodeTransistions().get(1).getTransitionId());
    assertEquals(et3.getTransitionId(), result.getEpisodeTransistions().get(2).getTransitionId());
    query.withScope(AclScope.Episode);
    result = db.getByQuery(ORG2, query);
    assertEquals(0, result.getEpisodeTransistions().size());
    assertEquals(0, result.getSeriesTransistions().size());
    // Test Series
    query.withScope(AclScope.Series);
    result = db.getByQuery(ORG, query);
    assertEquals(0, result.getEpisodeTransistions().size());
    assertEquals(3, result.getSeriesTransistions().size());
    assertEquals(st1.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
    assertEquals(st3.getTransitionId(), result.getSeriesTransistions().get(1).getTransitionId());
    assertEquals(st2.getTransitionId(), result.getSeriesTransistions().get(2).getTransitionId());
    // Test Date from
    query = TransitionQuery.query().after(new Date(1347000040000L));
    result = db.getByQuery(ORG, query);
    assertEquals(3, result.getEpisodeTransistions().size());
    assertEquals(1, result.getSeriesTransistions().size());
    assertEquals(st2.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
    // Test Date from, to
    query.before(new Date(1347005313736L)).after(new Date(1347000040000L));
    result = db.getByQuery(ORG, query);
    assertEquals(1, result.getEpisodeTransistions().size());
    assertEquals(1, result.getSeriesTransistions().size());
    assertEquals(st2.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
    assertEquals(et1.getTransitionId(), result.getEpisodeTransistions().get(0).getTransitionId());
    // Test id
    query = TransitionQuery.query().withId("uuid-series");
    result = db.getByQuery(ORG, query);
    assertEquals(0, result.getEpisodeTransistions().size());
    assertEquals(2, result.getSeriesTransistions().size());
    assertEquals(st1.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
    assertEquals(st2.getTransitionId(), result.getSeriesTransistions().get(1).getTransitionId());
    query = TransitionQuery.query().withId("uuid-series");
    result = db.getByQuery(ORG2, query);
    assertEquals(0, result.getEpisodeTransistions().size());
    assertEquals(0, result.getSeriesTransistions().size());
    // Test transitionId
    result = db.getByQuery(ORG, TransitionQuery.query().withTransitionId(et2.getTransitionId()));
    assertEquals(1, result.getEpisodeTransistions().size());
    assertEquals(0, result.getSeriesTransistions().size());
    assertEquals(et2.getTransitionId(), result.getEpisodeTransistions().get(0).getTransitionId());
    // Test is done
    query = TransitionQuery.query().withDone(false);
    result = db.getByQuery(ORG, query);
    assertEquals(2, result.getEpisodeTransistions().size());
    assertEquals(2, result.getSeriesTransistions().size());
    assertEquals(et1.getTransitionId(), result.getEpisodeTransistions().get(0).getTransitionId());
    assertEquals(et2.getTransitionId(), result.getEpisodeTransistions().get(1).getTransitionId());
    assertEquals(st1.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
    assertEquals(st2.getTransitionId(), result.getSeriesTransistions().get(1).getTransitionId());
    query.withDone(true);
    result = db.getByQuery(ORG, query);
    assertEquals(1, result.getEpisodeTransistions().size());
    assertEquals(1, result.getSeriesTransistions().size());
    assertEquals(et3.getTransitionId(), result.getEpisodeTransistions().get(0).getTransitionId());
    assertEquals(st3.getTransitionId(), result.getSeriesTransistions().get(0).getTransitionId());
}
Also used : SeriesACLTransition(org.opencastproject.authorization.xacml.manager.api.SeriesACLTransition) ManagedAcl(org.opencastproject.authorization.xacml.manager.api.ManagedAcl) TransitionQuery(org.opencastproject.authorization.xacml.manager.api.TransitionQuery) EpisodeACLTransition(org.opencastproject.authorization.xacml.manager.api.EpisodeACLTransition) TransitionResult(org.opencastproject.authorization.xacml.manager.api.TransitionResult) Date(java.util.Date) Test(org.junit.Test)

Example 3 with TransitionQuery

use of org.opencastproject.authorization.xacml.manager.api.TransitionQuery in project opencast by opencast.

the class AbstractAclServiceRestEndpoint method getTransitionsFor.

@GET
@Path("/transitionsfor.json")
@Produces(MediaType.APPLICATION_JSON)
@RestQuery(name = "getTransitionsForAsJson", description = "Get the transitions for a list of episodes and/or series as json. At least one of the lists must not be empty.", returnDescription = "Get the transitions as json", restParameters = { @RestParameter(name = "episodeIds", isRequired = false, description = "A list of comma separated episode IDs", type = STRING), @RestParameter(name = "seriesIds", isRequired = false, description = "A list of comma separated series IDs", type = STRING), @RestParameter(name = "done", isRequired = false, description = "Indicates if already applied transitions should be included", type = BOOLEAN) }, reponses = { @RestResponse(responseCode = SC_OK, description = "The request was processed succesfully"), @RestResponse(responseCode = SC_BAD_REQUEST, description = "Parameter error"), @RestResponse(responseCode = SC_INTERNAL_SERVER_ERROR, description = "Error during processing the request") })
public Response getTransitionsFor(@QueryParam("episodeIds") String episodeIds, @QueryParam("seriesIds") String seriesIds, @DefaultValue("false") @QueryParam("done") final boolean done) {
    final Monadics.ListMonadic<String> eIds = splitCommaSeparatedParam(option(episodeIds));
    final Monadics.ListMonadic<String> sIds = splitCommaSeparatedParam(option(seriesIds));
    if (eIds.value().isEmpty() && sIds.value().isEmpty()) {
        return badRequest();
    }
    final AclService aclService = aclService();
    try {
        // episodeId -> [transitions]
        final Map<String, List<EpisodeACLTransition>> eTs = eIds.foldl(MultiMap.<String, EpisodeACLTransition>multiHashMapWithArrayList(), new Function2.X<MultiMap<String, EpisodeACLTransition>, String, MultiMap<String, EpisodeACLTransition>>() {

            @Override
            public MultiMap<String, EpisodeACLTransition> xapply(MultiMap<String, EpisodeACLTransition> mmap, String id) throws Exception {
                // todo it is quite expensive to query each episode separately
                final TransitionQuery q = TransitionQuery.query().withId(id).withScope(AclScope.Episode).withDone(done);
                return mmap.putAll(id, aclService.getTransitions(q).getEpisodeTransistions());
            }
        }).value();
        // seriesId -> [transitions]
        final Map<String, List<SeriesACLTransition>> sTs = sIds.foldl(MultiMap.<String, SeriesACLTransition>multiHashMapWithArrayList(), new Function2.X<MultiMap<String, SeriesACLTransition>, String, MultiMap<String, SeriesACLTransition>>() {

            @Override
            public MultiMap<String, SeriesACLTransition> xapply(MultiMap<String, SeriesACLTransition> mmap, String id) throws Exception {
                // todo it is quite expensive to query each series separately
                final TransitionQuery q = TransitionQuery.query().withId(id).withScope(AclScope.Series).withDone(done);
                return mmap.putAll(id, aclService.getTransitions(q).getSeriesTransistions());
            }
        }).value();
        final Jsons.Obj episodesObj = buildEpisodesObj(eTs);
        final Jsons.Obj seriesObj = buildSeriesObj(sTs);
        return ok(obj(p("episodes", episodesObj), p("series", seriesObj)).toJson());
    } catch (Exception e) {
        logger.error("Error generating getTransitionsFor response", e);
        return serverError();
    }
}
Also used : Monadics(org.opencastproject.util.data.Monadics) Jsons(org.opencastproject.util.Jsons) SeriesACLTransition(org.opencastproject.authorization.xacml.manager.api.SeriesACLTransition) AclTransitionDbDuplicatedException(org.opencastproject.authorization.xacml.manager.impl.AclTransitionDbDuplicatedException) SeriesException(org.opencastproject.series.api.SeriesException) WebApplicationException(javax.ws.rs.WebApplicationException) AclServiceException(org.opencastproject.authorization.xacml.manager.api.AclServiceException) AclServiceNoReferenceException(org.opencastproject.authorization.xacml.manager.api.AclServiceNoReferenceException) NotFoundException(org.opencastproject.util.NotFoundException) MultiMap(org.opencastproject.util.data.MultiMap) TransitionQuery(org.opencastproject.authorization.xacml.manager.api.TransitionQuery) JsonConv.fullAccessControlList(org.opencastproject.authorization.xacml.manager.endpoint.JsonConv.fullAccessControlList) List(java.util.List) AccessControlList(org.opencastproject.security.api.AccessControlList) AclService(org.opencastproject.authorization.xacml.manager.api.AclService) EpisodeACLTransition(org.opencastproject.authorization.xacml.manager.api.EpisodeACLTransition) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) RestQuery(org.opencastproject.util.doc.rest.RestQuery)

Example 4 with TransitionQuery

use of org.opencastproject.authorization.xacml.manager.api.TransitionQuery in project opencast by opencast.

the class AclServiceImpl method deleteAcl.

@Override
public boolean deleteAcl(long id) throws AclServiceException, NotFoundException {
    final TransitionQuery query = TransitionQuery.query().withDone(false).withAclId(id);
    final TransitionResult result = persistence.getByQuery(organization, query);
    if (result.getEpisodeTransistions().size() > 0 || result.getSeriesTransistions().size() > 0)
        return false;
    Option<ManagedAcl> deletedAcl = getAcl(id);
    if (aclDb.deleteAcl(organization, id)) {
        if (deletedAcl.isSome()) {
            AclItem aclItem = AclItem.delete(deletedAcl.get().getName());
            messageSender.sendObjectMessage(AclItem.ACL_QUEUE, MessageSender.DestinationType.Queue, aclItem);
        }
        return true;
    }
    throw new NotFoundException("Managed acl with id " + id + " not found.");
}
Also used : AclItem(org.opencastproject.message.broker.api.acl.AclItem) TransitionQuery(org.opencastproject.authorization.xacml.manager.api.TransitionQuery) ManagedAcl(org.opencastproject.authorization.xacml.manager.api.ManagedAcl) NotFoundException(org.opencastproject.util.NotFoundException) TransitionResult(org.opencastproject.authorization.xacml.manager.api.TransitionResult)

Example 5 with TransitionQuery

use of org.opencastproject.authorization.xacml.manager.api.TransitionQuery in project opencast by opencast.

the class AbstractEventEndpoint method getEventAccessInformation.

@GET
@Path("{eventId}/access.json")
@SuppressWarnings("unchecked")
@Produces(MediaType.APPLICATION_JSON)
@RestQuery(name = "getEventAccessInformation", description = "Get the access information of an event", returnDescription = "The access information", pathParameters = { @RestParameter(name = "eventId", isRequired = true, description = "The event identifier", type = RestParameter.Type.STRING) }, reponses = { @RestResponse(responseCode = SC_BAD_REQUEST, description = "The required form params were missing in the request."), @RestResponse(responseCode = SC_NOT_FOUND, description = "If the event has not been found."), @RestResponse(responseCode = SC_OK, description = "The access information ") })
public Response getEventAccessInformation(@PathParam("eventId") String eventId) throws Exception {
    Opt<Event> optEvent = getIndexService().getEvent(eventId, getIndex());
    if (optEvent.isNone())
        return notFound("Cannot find an event with id '%s'.", eventId);
    // Add all available ACLs to the response
    JSONArray systemAclsJson = new JSONArray();
    List<ManagedAcl> acls = getAclService().getAcls();
    for (ManagedAcl acl : acls) {
        systemAclsJson.add(AccessInformationUtil.serializeManagedAcl(acl));
    }
    // Get the episode ACL
    final TransitionQuery q = TransitionQuery.query().withId(eventId).withScope(AclScope.Episode);
    List<EpisodeACLTransition> episodeTransistions;
    JSONArray transitionsJson = new JSONArray();
    try {
        episodeTransistions = getAclService().getTransitions(q).getEpisodeTransistions();
        for (EpisodeACLTransition trans : episodeTransistions) {
            transitionsJson.add(AccessInformationUtil.serializeEpisodeACLTransition(trans));
        }
    } catch (AclServiceException e) {
        logger.error("There was an error while trying to get the ACL transitions for series '{}' from the ACL service: {}", eventId, ExceptionUtils.getStackTrace(e));
        return RestUtil.R.serverError();
    }
    AccessControlList activeAcl = new AccessControlList();
    try {
        if (optEvent.get().getAccessPolicy() != null)
            activeAcl = AccessControlParser.parseAcl(optEvent.get().getAccessPolicy());
    } catch (Exception e) {
        logger.error("Unable to parse access policy because: {}", ExceptionUtils.getStackTrace(e));
    }
    Option<ManagedAcl> currentAcl = AccessInformationUtil.matchAcls(acls, activeAcl);
    JSONObject episodeAccessJson = new JSONObject();
    episodeAccessJson.put("current_acl", currentAcl.isSome() ? currentAcl.get().getId() : 0L);
    episodeAccessJson.put("acl", AccessControlParser.toJsonSilent(activeAcl));
    episodeAccessJson.put("privileges", AccessInformationUtil.serializePrivilegesByRole(activeAcl));
    episodeAccessJson.put("transitions", transitionsJson);
    if (StringUtils.isNotBlank(optEvent.get().getWorkflowState()) && WorkflowUtil.isActive(WorkflowInstance.WorkflowState.valueOf(optEvent.get().getWorkflowState())))
        episodeAccessJson.put("locked", true);
    JSONObject jsonReturnObj = new JSONObject();
    jsonReturnObj.put("episode_access", episodeAccessJson);
    jsonReturnObj.put("system_acls", systemAclsJson);
    return Response.ok(jsonReturnObj.toString()).build();
}
Also used : AccessControlList(org.opencastproject.security.api.AccessControlList) AclServiceException(org.opencastproject.authorization.xacml.manager.api.AclServiceException) JSONArray(org.json.simple.JSONArray) ManagedAcl(org.opencastproject.authorization.xacml.manager.api.ManagedAcl) SchedulerException(org.opencastproject.scheduler.api.SchedulerException) WebApplicationException(javax.ws.rs.WebApplicationException) EventCommentException(org.opencastproject.event.comment.EventCommentException) JSONException(org.codehaus.jettison.json.JSONException) JobEndpointException(org.opencastproject.adminui.exception.JobEndpointException) SearchIndexException(org.opencastproject.matterhorn.search.SearchIndexException) ParseException(java.text.ParseException) IndexServiceException(org.opencastproject.index.service.exception.IndexServiceException) UrlSigningException(org.opencastproject.security.urlsigning.exception.UrlSigningException) AclServiceException(org.opencastproject.authorization.xacml.manager.api.AclServiceException) UnauthorizedException(org.opencastproject.security.api.UnauthorizedException) NotFoundException(org.opencastproject.util.NotFoundException) WorkflowDatabaseException(org.opencastproject.workflow.api.WorkflowDatabaseException) WorkflowStateException(org.opencastproject.workflow.api.WorkflowStateException) JSONObject(org.json.simple.JSONObject) TransitionQuery(org.opencastproject.authorization.xacml.manager.api.TransitionQuery) Event(org.opencastproject.index.service.impl.index.event.Event) EpisodeACLTransition(org.opencastproject.authorization.xacml.manager.api.EpisodeACLTransition) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) RestQuery(org.opencastproject.util.doc.rest.RestQuery)

Aggregations

TransitionQuery (org.opencastproject.authorization.xacml.manager.api.TransitionQuery)6 GET (javax.ws.rs.GET)4 Path (javax.ws.rs.Path)4 Produces (javax.ws.rs.Produces)4 AclServiceException (org.opencastproject.authorization.xacml.manager.api.AclServiceException)4 ManagedAcl (org.opencastproject.authorization.xacml.manager.api.ManagedAcl)4 AccessControlList (org.opencastproject.security.api.AccessControlList)4 NotFoundException (org.opencastproject.util.NotFoundException)4 RestQuery (org.opencastproject.util.doc.rest.RestQuery)4 WebApplicationException (javax.ws.rs.WebApplicationException)3 EpisodeACLTransition (org.opencastproject.authorization.xacml.manager.api.EpisodeACLTransition)3 SeriesACLTransition (org.opencastproject.authorization.xacml.manager.api.SeriesACLTransition)3 TransitionResult (org.opencastproject.authorization.xacml.manager.api.TransitionResult)3 SeriesException (org.opencastproject.series.api.SeriesException)3 Date (java.util.Date)2 List (java.util.List)2 JSONArray (org.json.simple.JSONArray)2 JSONObject (org.json.simple.JSONObject)2 AclService (org.opencastproject.authorization.xacml.manager.api.AclService)2 AclServiceNoReferenceException (org.opencastproject.authorization.xacml.manager.api.AclServiceNoReferenceException)2