Java 类javax.ws.rs.core.PathSegment 实例源码

项目:oryx2    文件:SimilarityToItem.java   
@GET
@Path("{toItemID}/{itemID : .+}")
@Produces({MediaType.TEXT_PLAIN, "text/csv", MediaType.APPLICATION_JSON})
public List<Double> get(
    @PathParam("toItemID") String toItemID,
    @PathParam("itemID") List<PathSegment> pathSegmentsList) throws OryxServingException {

  ALSServingModel alsServingModel = getALSServingModel();
  float[] toItemFeatures = alsServingModel.getItemVector(toItemID);
  checkExists(toItemFeatures != null, toItemID);

  double toItemFeaturesNorm = VectorMath.norm(toItemFeatures);
  return pathSegmentsList.stream().map(item -> {
    float[] itemFeatures = alsServingModel.getItemVector(item.getPath());
    if (itemFeatures == null) {
      return 0.0;
    } else {
      double value = VectorMath.cosineSimilarity(itemFeatures, toItemFeatures, toItemFeaturesNorm);
      Preconditions.checkState(!(Double.isInfinite(value) || Double.isNaN(value)), "Bad similarity");
      return value;
    }
  }).collect(Collectors.toList());
}
项目:oryx2    文件:Estimate.java   
@GET
@Path("{userID}/{itemID : .+}")
@Produces({MediaType.TEXT_PLAIN, "text/csv", MediaType.APPLICATION_JSON})
public List<Double> get(@PathParam("userID") String userID,
                        @PathParam("itemID") List<PathSegment> pathSegmentsList)
    throws OryxServingException {
  ALSServingModel model = getALSServingModel();
  float[] userFeatures = model.getUserVector(userID);
  checkExists(userFeatures != null, userID);
  return pathSegmentsList.stream().map(pathSegment -> {
    float[] itemFeatures = model.getItemVector(pathSegment.getPath());
    if (itemFeatures == null) {
      return 0.0;
    } else {
      double value = VectorMath.dot(itemFeatures, userFeatures);
      Preconditions.checkState(!(Double.isInfinite(value) || Double.isNaN(value)), "Bad estimate");
      return value;
    }
  }).collect(Collectors.toList());
}
项目:personium-core    文件:PersoniumReadDeleteModeManager.java   
/**
 * PCSの動作モードがReadDeleteOnlyモードの場合は、参照系リクエストのみ許可する.
 * 許可されていない場合は例外を発生させてExceptionMapperにて処理する.
 * @param method リクエストメソッド
 * @param pathSegment パスセグメント
 */
public static void checkReadDeleteOnlyMode(String method, List<PathSegment> pathSegment) {
    // ReadDeleteOnlyモードでなければ処理を許可する
    if (!ReadDeleteModeLockManager.isReadDeleteOnlyMode()) {
        return;
    }

    // 認証処理はPOSTメソッドだが書き込みは行わないので例外として許可する
    if (isAuthPath(pathSegment)) {
        return;
    }

    // $batchはPOSTメソッドだが参照と削除のリクエストも実行可能であるため
    // $batch内部で書き込み系処理をエラーとする
    if (isBatchPath(pathSegment)) {
        return;
    }

    // ReadDeleteOnlyモード時に、許可メソッドであれば処理を許可する
    if (ACCEPT_METHODS.contains(method)) {
        return;
    }

    throw PersoniumCoreException.Server.READ_DELETE_ONLY;
}
项目:personium-core    文件:PersoniumReadDeleteModeManagerTest.java   
/**
 * ReadDeleteOnlyモード時に$batchに対するPOSTメソッドが実行された場合はPersoniumCoreExceptionが発生しないこと.
 * @throws Exception .
 */
@Test
public void ReadDeleteOnlyモード時に$batchに対するPOSTメソッドが実行された場合はPersoniumCoreExceptionが発生しないこと() throws Exception {
    PowerMockito.spy(ReadDeleteModeLockManager.class);
    PowerMockito.when(ReadDeleteModeLockManager.class, "isReadDeleteOnlyMode").thenReturn(true);
    try {

        List<PathSegment> pathSegment = getPathSegmentList(new String[] {"cell", "box", "col", "odata", "$batch" });
        PersoniumReadDeleteModeManager.checkReadDeleteOnlyMode(HttpMethod.POST, pathSegment);

        // 1階層パスを深くしても例外が発生しないことを確認
        pathSegment = getPathSegmentList(new String[] {"cell", "box", "col", "col", "odata", "$batch" });
        PersoniumReadDeleteModeManager.checkReadDeleteOnlyMode(HttpMethod.POST, pathSegment);
    } catch (PersoniumCoreException e) {
        fail(e.getMessage());
    }
}
项目:fili    文件:DataApiRequestImpl.java   
/**
 * Extracts the list of dimensions from the url dimension path segments and "show" matrix params and generates a map
 * of dimension to dimension fields which needs to be annotated on the response.
 * <p>
 * If no "show" matrix param has been set, it returns the default dimension fields configured for the dimension.
 *
 * @param apiDimensionPathSegments  Path segments for the dimensions
 * @param dimensionDictionary  Dimension dictionary to look the dimensions up in
 *
 * @return A map of dimension to requested dimension fields
 */
protected LinkedHashMap<Dimension, LinkedHashSet<DimensionField>> generateDimensionFields(
        @NotNull List<PathSegment> apiDimensionPathSegments,
        @NotNull DimensionDictionary dimensionDictionary
) {
    try (TimedPhase timer = RequestLog.startTiming("GeneratingDimensionFields")) {
        return apiDimensionPathSegments.stream()
                .filter(pathSegment -> !pathSegment.getPath().isEmpty())
                .collect(Collectors.toMap(
                        pathSegment -> dimensionDictionary.findByApiName(pathSegment.getPath()),
                        pathSegment -> bindShowClause(pathSegment, dimensionDictionary),
                        (LinkedHashSet<DimensionField> e, LinkedHashSet<DimensionField> i) -> {
                            e.addAll(i);
                            return e;
                        },
                        LinkedHashMap::new
                ));
    }
}
项目:fili    文件:ResponseFormat.java   
/**
 * This method will get the path segments and the interval (if it is part of the request) from the apiRequest and
 * create a content-disposition header value with a proposed filename in the following format.
 * <p>
 * If the path segments are ["data", "datasource", "granularity", "dim1"] and the query params have interval
 * {"dateTime": "a/b"}, then the result would be "attachment; filename=data-datasource-granularity-dim1_a_b.csv".
 * For a dimension query without a "dateTime" query param and path segments
 * ["dimensions", "datasource", "dim1"], then the result would be
 * "attachment; filename=dimensions-datasource-dim1.csv".
 *
 * @param uriInfo  UriInfo of the request
 *
 * @return A content disposition header telling the browser the name of the CSV file to be downloaded
 */
public static String getCsvContentDispositionValue(UriInfo uriInfo) {
    String uriPath = uriInfo.getPathSegments().stream()
            .map(PathSegment::getPath)
            .collect(Collectors.joining("-"));

    String interval = uriInfo.getQueryParameters().getFirst("dateTime");
    if (interval == null) {
        interval = "";
    } else {
        // Chrome treats ',' as duplicate header so replace it with '__' to make chrome happy.
        interval = "_" + interval.replace("/", "_").replace(",", "__");
    }

    return "attachment; filename=" + uriPath + interval + ".csv";
}
项目:antioch    文件:MatchesPathIdValidatorTest.java   
@Test
@Parameters({ //
    "fe944b98-18b1-11e5-9d51-1f35c61c7a23, fe944b98-18b1-11e5-9d51-1f35c61c7a23, true", // same UUIDs
    "fe944b98-18b1-11e5-9d51-1f35c61c7a23, 27947b26-18b2-11e5-be1c-c7fb9bd13f9b, false" // different UUIDs
})
public void testValidationOfUUIDinURIShouldMatchUUIDinPrototype(String uriId, String protoId, boolean valid) {
  final PathSegment mockedPathSegment = mock(PathSegment.class);
  when(mockedPathSegment.getPath()).thenReturn(protoId);

  final UriInfo mockedUriInfo = mock(UriInfo.class);
  when(mockedUriInfo.getPathSegments()).thenReturn(Lists.newArrayList(mockedPathSegment));

  final ResourcePrototype mockedPrototype = mock(ResourcePrototype.class);
  when(mockedPrototype.getId()).thenReturn(new UUIDParam(uriId));

  assertThat(new Validator(mockedUriInfo).isValid(mockedPrototype, null), is(valid));

  verify(mockedUriInfo, atLeastOnce()).getPathSegments();
  verify(mockedPrototype).getId();
}
项目:aggregate    文件:InstanceFileServiceImpl.java   
/**
 * Construct the path for the file. This is the entire path excluding the app
 * id.
 *
 * @param segments
 * @return
 */
private String constructPathFromSegments(List<PathSegment> segments) {
  // Now construct up the path from the segments.
  // We are NOT going to include the app id. Therefore if you upload a file
  // with a path of appid/myDir/myFile.html, the path will be stored as
  // myDir/myFile.html. This is so that when you get the filename on the
  // manifest, it won't matter what is the root directory of your app on your
  // device. Otherwise you might have to strip the first path segment or do
  // something similar.
  StringBuilder sb = new StringBuilder();
  int i = 0;
  for (PathSegment segment : segments) {
    sb.append(segment.getPath());
    if (i < segments.size() - 1) {
      sb.append(BasicConsts.FORWARDSLASH);
    }
    i++;
  }
  String wholePath = sb.toString();
  return wholePath;
}
项目:aggregate    文件:FileServiceImpl.java   
/**
 * Construct the path for the file. This is the entire path excluding the app
 * id.
 *
 * @param segments
 * @return
 */
private String constructPathFromSegments(List<PathSegment> segments) {
  // Now construct up the path from the segments.
  // We are NOT going to include the app id. Therefore if you upload a file
  // with a path of /myDir/myFile.html, the path will be stored as
  // myDir/myFile.html. This is so that when you get the filename on the
  // manifest, it won't matter what is the root directory of your app on your
  // device. Otherwise you might have to strip the first path segment or do
  // something similar.
  StringBuilder sb = new StringBuilder();
  int i = 0;
  for (PathSegment segment : segments) {
    sb.append(segment.getPath());
    if (i < segments.size() - 1) {
      sb.append(BasicConsts.FORWARDSLASH);
    }
    i++;
  }
  String wholePath = sb.toString();
  return wholePath;
}
项目:esb-message-admin    文件:SearchErrorResourceBean.java   
@GET
@Path("/criteria/{search_criteria}")
@Produces({MediaType.APPLICATION_JSON})
public SearchResult getErrorsByCriteria(@PathParam("search_criteria") PathSegment argCriteria,
                                        @QueryParam("fromDate") String fromDate,
                                        @QueryParam("toDate") String toDate,
                                        @QueryParam("sortField") String sortField,
                                        @QueryParam("sortAsc") Boolean sortAsc,
                                        @QueryParam("start") Integer start,
                                        @QueryParam("results") Integer maxResults) {
    SearchCriteria criteria = getCriteria(argCriteria);

    String sortBy = StringUtils.isBlank(sortField) ? "timestamp" : sortField;
    Boolean sortAscending = sortAsc==null ? true : sortAsc;

    LOGGER.info("search criteria: {}  sortBy: {} asc=: {}", criteria, sortBy, sortAscending);
    return client.get().searchMessagesByCriteria(criteria, getDate(fromDate), getDate(toDate), sortBy, sortAscending, start, maxResults);
}
项目:esb-message-admin    文件:SearchErrorResourceBean.java   
private SearchCriteria getCriteria(PathSegment searchCriteria) {
    SearchCriteria criteria = new SearchCriteria();
    List<Criterion> criteriaList = new ArrayList<Criterion>();
    MultivaluedMap<String, String> map = searchCriteria.getMatrixParameters();

    for (Map.Entry<String, List<String>> entry : map.entrySet()) {
        for (String value : entry.getValue()) {
            Criterion criterion = new Criterion();
            if (!SearchField.isPreDefined(entry.getKey())) {
                criterion.setCustomKey(entry.getKey());
                criterion.setValue(value);
            } else {
                getPredefinedCriteria(entry, value, criterion);
            }
            criteriaList.add(criterion);
        }
    }
    criteria.setCriteria(criteriaList.toArray(new Criterion[0]));
    LOGGER.debug("criteria: {}", criteria.toString());
    return criteria;
}
项目:incubator-taverna-server    文件:FilenameUtils.java   
/**
 * Get a named directory entry from a workflow run.
 * 
 * @param run
 *            The run whose working directory is to be used as the root of
 *            the search.
 * @param d
 *            The path segments describing what to look up.
 * @return The directory entry whose name is equal to the last part of the
 *         path; an empty path will retrieve the working directory handle
 *         itself.
 * @throws NoDirectoryEntryException
 *             If there is no such entry.
 * @throws FilesystemAccessException
 *             If the directory isn't specified or isn't readable.
 */
public DirectoryEntry getDirEntry(TavernaRun run, List<PathSegment> d)
        throws FilesystemAccessException, NoDirectoryEntryException {
    Directory dir = run.getWorkingDirectory();
    if (d == null || d.isEmpty())
        return dir;
    DirectoryEntry found = dir;
    boolean mustBeLast = false;

    // Must be nested loops; avoids problems with %-encoded "/" chars
    for (PathSegment segment : d)
        for (String bit : segment.getPath().split("/")) {
            if (mustBeLast)
                throw new FilesystemAccessException(TYPE_ERROR);
            found = getEntryFromDir(bit, dir);
            dir = null;
            if (found instanceof Directory) {
                dir = (Directory) found;
                mustBeLast = false;
            } else
                mustBeLast = true;
        }
    return found;
}
项目:incubator-taverna-server    文件:TavernaServerInputREST.java   
/**
 * Make a description of the given input port.
 * 
 * @param inputPort
 */
public InDesc(Input inputPort, UriInfo ui) {
    super(true);
    name = inputPort.getName();
    if (inputPort.getFile() != null) {
        assignment = new InDesc.File();
        assignment.contents = inputPort.getFile();
    } else {
        assignment = new InDesc.Value();
        assignment.contents = inputPort.getValue();
    }
    // .../runs/{id}/input/input/{name} ->
    // .../runs/{id}/input/expected#{name}
    UriBuilder ub = ui.getBaseUriBuilder();
    List<PathSegment> segments = ui.getPathSegments();
    for (PathSegment s : segments.subList(0, segments.size() - 2))
        ub.segment(s.getPath());
    ub.fragment(name);
    descriptorRef = new Uri(ub).ref;
}
项目:scheduling    文件:SchedulerStateRest.java   
@Override
public JobValidationData validateFromUrl(String sessionId, String url, PathSegment pathSegment)
        throws NotConnectedRestException {

    File tmpWorkflowFile = null;
    try {
        checkAccess(sessionId);
        String jobXml = downloadWorkflowContent(sessionId, url);
        tmpWorkflowFile = File.createTempFile("job", "d");
        IOUtils.write(jobXml, new FileOutputStream(tmpWorkflowFile));

        Map<String, String> jobVariables = workflowVariablesTransformer.getWorkflowVariablesFromPathSegment(pathSegment);

        return jobValidator.validateJobDescriptor(tmpWorkflowFile, jobVariables);

    } catch (JobCreationRestException | IOException e) {
        JobValidationData validation = new JobValidationData();
        validation.setErrorMessage("Error while reading workflow at url: " + url);
        validation.setStackTrace(getStackTrace(e));
        return validation;
    } finally {
        FileUtils.deleteQuietly(tmpWorkflowFile);
    }
}
项目:olat    文件:CatalogWebService.java   
/**
 * Returns the metadata of the catalog entry.
 * 
 * @response.representation.200.qname {http://www.example.com}catalogEntryVO
 * @response.representation.200.mediaType application/xml, application/json
 * @response.representation.200.doc The catalog entry
 * @response.representation.200.example {@link org.olat.connectors.rest.catalog.Examples#SAMPLE_CATALOGENTRYVO}
 * @response.representation.401.doc The path could not be resolved to a valid catalog entry
 * @param path
 *            The path
 * @param uriInfo
 *            The URI informations
 * @return The response
 */
@GET
@Path("{path:.*}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getCatalogEntry(@PathParam("path") final List<PathSegment> path, @Context final UriInfo uriInfo) {
    if (path.isEmpty()) {
        return getRoots();
    }

    final Long ceKey = getCatalogEntryKeyFromPath(path);
    if (ceKey == null) {
        return Response.serverError().status(Status.NOT_ACCEPTABLE).build();
    }

    final CatalogEntry ce = catalogService.loadCatalogEntry(ceKey);
    if (ce == null) {
        return Response.serverError().status(Status.NOT_FOUND).build();
    }

    final CatalogEntryVO vo = link(get(ce), uriInfo);
    return Response.ok(vo).build();
}
项目:olat    文件:CatalogWebService.java   
/**
 * Returns the metadata of the catalog entry.
 * 
 * @response.representation.200.qname {http://www.example.com}catalogEntryVO
 * @response.representation.200.mediaType application/xml, application/json
 * @response.representation.200.doc The catalog entry
 * @response.representation.200.example {@link org.olat.connectors.rest.catalog.Examples#SAMPLE_CATALOGENTRYVO}
 * @response.representation.401.doc The path could not be resolved to a valid catalog entry
 * @param path
 *            The path
 * @param uriInfo
 *            The URI informations
 * @return The response
 */
@GET
@Path("{path:.*}")
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response getCatalogEntry(@PathParam("path") final List<PathSegment> path, @Context final UriInfo uriInfo) {
    if (path.isEmpty()) {
        return getRoots();
    }

    final Long ceKey = getCatalogEntryKeyFromPath(path);
    if (ceKey == null) {
        return Response.serverError().status(Status.NOT_ACCEPTABLE).build();
    }

    final CatalogEntry ce = catalogService.loadCatalogEntry(ceKey);
    if (ce == null) {
        return Response.serverError().status(Status.NOT_FOUND).build();
    }

    final CatalogEntryVO vo = link(get(ce), uriInfo);
    return Response.ok(vo).build();
}
项目:RaspberryPiBeaconParser    文件:ReplayService.java   
@GET
@Path("test/{dataSet}")
@Produces({"text/html"})
public String testPathParam(@DefaultValue("SevenScannersRun-2015-05-11.json.gz") @PathParam("dataSet") PathSegment dataSet) {
   StringBuilder response = new StringBuilder("<html><title>ReplayService.replayData</title><body><h1>dataSet=");
   response.append(dataSet.getPath());
   response.append("</h1>");
   response.append("<h2>Path Parameters</h2><ul>");
   for (String key : dataSet.getMatrixParameters().keySet()) {
      response.append("<li>");
      response.append(key);
      response.append("=");
      response.append(dataSet.getMatrixParameters().getFirst(key));
      response.append("</li>");
   }
   response.append("</ul>");
   return response.toString();
}
项目:hawkular-metrics    文件:RecordMetricsFilter.java   
private String getPath(UriInfo uriInfo) {
    MultivaluedMap<String, String> pathParameters = uriInfo.getPathParameters(true);
    final Map<String, String> valuesToParams = pathParameters.entrySet().stream()
            .map(entry -> entry.getValue().stream()
                    .collect(toMap(Function.identity(), value -> "{" + entry.getKey() + "}")))
            .reduce(new HashMap<>(), (m1, m2) -> {
                m1.putAll(m2);
                return m1;
            });
    return uriInfo.getPathSegments(true).stream()
            .map(PathSegment::getPath)
            .map(path -> {
                if (valuesToParams.containsKey(path)) {
                    return valuesToParams.get(path);
                }
                return path;
            })
            .collect(joining("/"));
}
项目:carbon-registry    文件:RegistryRestSuper.java   
/**
 * This method calculates the string literal of the requested path of the
 * resource.
 *
 * @param path list of path segment (eg: <_system,governance,sample.xml>
 * @return concatenated string representation of the path variable
 */
protected String getResourcePath(List<PathSegment> path) {
    if (path == null || !(path.size() > 0)) {
        return null;
    }
    String resourcePath = "";
    StringBuilder strBuilder = new StringBuilder();
    strBuilder.append(resourcePath);
    for (PathSegment pathSegment : path) {
        strBuilder.append("/");
        strBuilder.append(pathSegment);
    }
    resourcePath = strBuilder.toString();
    if (resourcePath.length() == 0) {
        resourcePath = "/";
    }
    return resourcePath;
}
项目:fintp_api    文件:ResourcesUtils.java   
/**
 * Method createParentLink. Create link to the parent resource
 * 
 * @param baseObject
 *            JSONObject
 * @param rel
 *            String
 * @param uriInfo
 *            UriInfo
 * @return JSONObject
 * @throws JSONException
 */
public static JSONObject createParentLink(JSONObject baseObject,
        String rel, UriInfo uriInfo) throws JSONException {

    // TODO : use URIBuilder for path composition
    // remove last segment and recreate the path
    String href = "";
    List<PathSegment> listSegments = uriInfo.getPathSegments();
    listSegments.remove(listSegments.size() - 1);
    for (PathSegment xp : listSegments) {
        href += xp.getPath() + "/";
    }
    href = href.substring(0, href.length() - 1);

    // add the link
    return createLink(baseObject, href, rel);
}
项目:usergrid    文件:CollectionResource.java   
private void addItemToServiceContext( UriInfo ui, PathSegment itemName ) throws Exception {

        // The below is duplicated because it could change in the future
        // and is probably not all needed but not determined yet.
        if ( itemName.getPath().startsWith( "{" ) ) {
            Query query = Query.fromJsonString( itemName.getPath() );
            if ( query != null ) {
                ServiceParameter.addParameter( getServiceParameters(), query );
            }
        }
        else {
            ServiceParameter.addParameter( getServiceParameters(), itemName.getPath() );
        }

        addMatrixParams( getServiceParameters(), ui, itemName );
    }
项目:usergrid    文件:CollectionResource.java   
@GET
@Path( "{itemName}/_settings")
@Produces({MediaType.APPLICATION_JSON,"application/javascript"})
@RequireApplicationAccess
@JSONP
public ApiResponse executeGetOnIndex(
    @Context UriInfo ui,
    @PathParam("itemName") PathSegment itemName,
    @QueryParam("callback") @DefaultValue("callback") String callback ) throws Exception {

    if(logger.isTraceEnabled()){
        logger.trace( "CollectionResource.executeGetOnSettings" );
    }

    addItemToServiceContext( ui, itemName );

    ApiResponse response = createApiResponse();
    response.setAction( "get" );
    response.setApplication( services.getApplication() );
    response.setParams( ui.getQueryParameters() );

    executeServiceGetRequestForSettings( ui,response,ServiceAction.GET,null );

    return response;
}
项目:usergrid    文件:CollectionResource.java   
@POST
@Path("{itemName}/_reindex")
@Produces({ MediaType.APPLICATION_JSON,"application/javascript"})
@RequireSystemAccess
@JSONP
public ApiResponse executePostForReindexing(
    @Context UriInfo ui, String body,
    @PathParam("itemName") PathSegment itemName,
    @QueryParam("callback") @DefaultValue("callback") String callback ) throws Exception {

    addItemToServiceContext( ui, itemName );

    IndexResource indexResource = new IndexResource(injector);
    return indexResource.rebuildIndexesPost(
        services.getApplicationId().toString(),itemName.getPath(),false,callback );
}
项目:usergrid    文件:NotifiersResource.java   
@Override
@Path("{entityId: [A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}}")
public AbstractContextResource addIdParameter(@Context UriInfo ui,
        @PathParam("entityId") PathSegment entityId) throws Exception {

    if (logger.isTraceEnabled()) {
        logger.trace("NotifiersResource.addIdParameter");
    }

    UUID itemId = UUID.fromString(entityId.getPath());

    addParameter(getServiceParameters(), itemId);

    addMatrixParams(getServiceParameters(), ui, entityId);

    return getSubResource(NotifierResource.class).init(  Identifier.fromUUID(itemId));
}
项目:usergrid    文件:UsersResource.java   
@Override
@Path(RootResource.ENTITY_ID_PATH)
public AbstractContextResource addIdParameter( @Context UriInfo ui, @PathParam("entityId") PathSegment entityId )
        throws Exception {

    if(logger.isTraceEnabled()){
        logger.trace( "ServiceResource.addIdParameter" );
    }

    UUID itemId = UUID.fromString( entityId.getPath() );

    addParameter( getServiceParameters(), itemId );

    addMatrixParams( getServiceParameters(), ui, entityId );

    return getSubResource( UserResource.class ).init( Identifier.fromUUID( itemId ) );
}
项目:usergrid    文件:UserResource.java   
@Override
@Path("{itemName}")
public AbstractContextResource addNameParameter( @Context UriInfo ui, @PathParam("itemName") PathSegment itemName )
        throws Exception {

    // check for user extension
    String resourceClass =
            USER_EXTENSION_RESOURCE_PREFIX + StringUtils.capitalize( itemName.getPath() ) + "Resource";
    AbstractUserExtensionResource extensionResource = null;
    try {
        @SuppressWarnings("unchecked") Class<AbstractUserExtensionResource> extensionCls =
                ( Class<AbstractUserExtensionResource> ) Class.forName( resourceClass );
        extensionResource = getSubResource( extensionCls );
    }
    catch ( Exception e ) {
        // intentionally empty
    }
    if ( extensionResource != null ) {
        return extensionResource;
    }

    return super.addNameParameter( ui, itemName );
}
项目:secure-data-service    文件:UriMutator.java   
private boolean shouldSkipMutationToEnableSearch(
        List<PathSegment> segments, String queryParameters) {
    boolean skipMutation = false;
    if (segments.size() == NUM_SEGMENTS_IN_ONE_PART_REQUEST) {
        String[] queries = queryParameters != null ? queryParameters
                .split("&") : new String[0];
        for (String query : queries) {
            if (!query
                    .matches("(limit|offset|expandDepth|includeFields|excludeFields|sortBy|sortOrder|optionalFields|views|includeCustom|selector)=.+")) {
                final int baseResourceIndex = 1;
            }
        }

    }
    return skipMutation;
}
项目:secure-data-service    文件:UriMutator.java   
/**
 * Mutates the API call (not to a base entity) to a more-specific (and
 * generally more constrained) URI based on the user's role.
 * 
 * @param segments
 *            List of Path Segments representing request URI.
 * @param queryParameters
 *            String containing query parameters.
 * @param user
 *            User requesting resource.
 * @return MutatedContainer representing {mutated path (if necessary),
 *         mutated parameters (if necessary)}, where path or parameters will
 *         be null if they didn't need to be rewritten.
 */
private MutatedContainer mutateUriBasedOnRole(List<PathSegment> segments,
        String queryParameters, Entity user)
        throws IllegalArgumentException {
    MutatedContainer mutatedPathAndParameters = null;
    if (mutateToTeacher()) {
        mutatedPathAndParameters = mutateTeacherRequest(segments,
                queryParameters, user);
    } else if (mutateToStaff()) {
        mutatedPathAndParameters = mutateStaffRequest(segments,
                queryParameters, user);
    } else if (isStudent(user) || isParent(user)) {
        mutatedPathAndParameters = mutateStudentParentRequest(
                stringifyPathSegments(segments), queryParameters, user);
    }

    return mutatedPathAndParameters;
}
项目:secure-data-service    文件:AccessValidator.java   
private List<String> cleanPath(List<PathSegment> segs) {
    if (segs == null || segs.isEmpty()) {
        return Collections.<String> emptyList();
    }

    List<String> paths = new ArrayList<String>();
    // first one is version, system calls (un-versioned) have been handled elsewhere
    for (int i = 1; i < segs.size(); ++i) {
        if (segs.get(i) != null) {
            String path = segs.get(i).getPath();
            if (path != null && !path.isEmpty()) {
                paths.add(path);
            }
        }
    }

    return paths;
}
项目:secure-data-service    文件:ContextValidator.java   
/**
 * white list student accessible URL. Can't do it in validateUserHasContextToRequestedEntity
 * because we must also block some url that only has 2 segment, i.e.
 * disciplineActions/disciplineIncidents
 *
 * @param request
 * @return if url is accessible to students principals
 */
public boolean isUrlBlocked(ContainerRequest request) {
    List<PathSegment> segs = cleanEmptySegments(request.getPathSegments());

    if (isSystemCall(segs)) {
        // do not block system calls
        return false;
    }

    if (SecurityUtil.isStudent()) {
        return !studentAccessValidator.isAllowed(request);
    } else if (SecurityUtil.isParent()) {
        return !parentAccessValidator.isAllowed(request);
    }

    return false;
}
项目:secure-data-service    文件:ContextValidator.java   
private boolean isSystemCall(List<PathSegment> pathSegments) {
    /**
     * assuming all resource endpoints are versioned
     */
    if (pathSegments == null || pathSegments.size() == 0) {
        // /api/rest/ root access?
        return false;
    }

    // all data model resources are versioned
    if (isVersionString(pathSegments.get(0).getPath())) {
        return false;
    }

    return true;
}
项目:secure-data-service    文件:URITranslator.java   
public void translate(ContainerRequest request) {
    String uri = request.getPath();
    List<PathSegment> segments = request.getPathSegments();
    String version = PathConstants.V1;

    if (!segments.isEmpty()) {
        version = segments.get(0).getPath();
    }

    for (Map.Entry<String, URITranslation> entry : uriTranslationMap.entrySet()) {
        String key = entry.getKey();
        if (uri.contains(key)) {
            String newPath = uriTranslationMap.get(key).translate(request.getPath());
            if (!newPath.equals(uri)) {
                request.setUris(request.getBaseUri(),
                    request.getBaseUriBuilder().path(version).path(newPath).build());
            }
        }
    }
}
项目:secure-data-service    文件:GetResponseBuilder.java   
/**
 * Throws a QueryParseException if the end user tried to query an endpoint that does
 * not support querying.
 * 
 * 
 * @param uriInfo
 */
protected void validatePublicResourceQuery(final UriInfo uriInfo) {
    List<PathSegment> uriPathSegments = uriInfo.getPathSegments();

    if (uriPathSegments != null) {
     // if of the form "v1/foo"
        if (uriPathSegments.size() == 2) {
            String endpoint = uriPathSegments.get(1).getPath();

            // if that endpoint does not allow querying
            if (this.resourceEndPoint.getQueryingDisallowedEndPoints().contains(endpoint)) {
                ApiQuery apiQuery = new ApiQuery(uriInfo);

                // if the user tried to execute a query/filter
                if (apiQuery.getCriteria().size() > 0) {
                    throw new QueryParseException("Querying not allowed", apiQuery.toString());
                }
            }
        }
    }
}
项目:secure-data-service    文件:VersionFilter.java   
private ContainerRequest updateContainerRequest(ContainerRequest containerRequest, List<PathSegment> segments, String newVersion) {
    //add the new version
    UriBuilder builder = containerRequest.getBaseUriBuilder().path(newVersion);

    //add the rest of the request
    for (PathSegment segment : segments) {
        builder.path(segment.getPath());
    }

    if (containerRequest.getRequestUri().getQuery() != null &&
            !containerRequest.getRequestUri().getQuery().isEmpty()) {
        builder.replaceQuery(containerRequest.getRequestUri().getQuery());
    }

    containerRequest.getProperties().put(REQUESTED_PATH, containerRequest.getPath());
    containerRequest.setUris(containerRequest.getBaseUri(), builder.build());

    return containerRequest;
}
项目:secure-data-service    文件:EndpointMutatorTest.java   
@Test
public void testGetResourceVersionForSearch() {
    List<PathSegment> segments = getPathSegmentList("v1/search");
    MutatedContainer mutated = mock(MutatedContainer.class);
    when(mutated.getPath()).thenReturn("/search");
    assertEquals("Should match", "v1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.0/search");
    assertEquals("Should match", "v1.0", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.1/search");
    assertEquals("Should match", "v1.1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.3/search");
    assertEquals("Should match", "v1.3", endpointMutator.getResourceVersion(segments, mutated));
}
项目:secure-data-service    文件:EndpointMutatorTest.java   
@Test
public void testGetResourceVersion() {
    List<PathSegment> segments = getPathSegmentList("v1/students");
    MutatedContainer mutated = mock(MutatedContainer.class);
    when(mutated.getPath()).thenReturn("/studentSectionAssociations/1234/students");
    assertEquals("Should match", "v1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.0/students");
    assertEquals("Should match", "v1.0", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.1/students");
    assertEquals("Should match", "v1.1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.3/students");
    assertEquals("Should match", "v1.3", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.1/students");
    when(mutated.getPath()).thenReturn(null);
    assertEquals("Should match", "v1.1", endpointMutator.getResourceVersion(segments, mutated));
}
项目:secure-data-service    文件:EndpointMutatorTest.java   
@Test
public void testGetResourceVersionForPublicResources() {
    List<PathSegment> segments = getPathSegmentList("v1/assessments");

    MutatedContainer mutated = mock(MutatedContainer.class);
    when(mutated.getPath()).thenReturn("/search/assessments");

    assertEquals("Should match", "v1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.0/assessments");
    assertEquals("Should match", "v1.1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.1/assessments");
    assertEquals("Should match", "v1.1", endpointMutator.getResourceVersion(segments, mutated));

    segments = getPathSegmentList("v1.3/assessments");
    assertEquals("Should match", "v1.3", endpointMutator.getResourceVersion(segments, mutated));
}
项目:secure-data-service    文件:EndpointMutatorTest.java   
@Test(expected = NotFoundException.class)
public void testNoPathSegments() throws URISyntaxException {
    // Test /api/rest with no additional path segments.
    SLIPrincipal principle = mock(SLIPrincipal.class);
    ClientToken clientToken = mock(ClientToken.class);
    when(clientToken.getClientId()).thenReturn("theAppId");
    OAuth2Authentication auth = mock(OAuth2Authentication.class);
    when(auth.getPrincipal()).thenReturn(principle);
    when(auth.getClientAuthentication()).thenReturn(clientToken);

    ContainerRequest request = mock(ContainerRequest.class);
    List<PathSegment> segments = Collections.emptyList();
    when(request.getPathSegments()).thenReturn(segments);
    when(request.getMethod()).thenReturn("GET");
    when(request.getRequestUri()).thenReturn(new URI("http://not.valid.inbloom.org"));

    endpointMutator.mutateURI(auth, request);
}
项目:secure-data-service    文件:UriMutatorTest.java   
@Test
public void testDeterministicRewrite() {
    // no user entity needed
    when(principal.getEntity()).thenReturn(null);

    Map<String, Object> body = new HashMap<String, Object>();
    body.put("staffUniqueStateId", "teacher");
    Entity teacher = repo.create("teacher", body, "staff");
    PathSegment v1 = Mockito.mock(PathSegment.class);
    when(v1.getPath()).thenReturn("/staff");
    Assert.assertEquals("Endpoint should be rewritten to /teachers/id",
            createMutatedContainer("/teachers/" + teacher.getEntityId(), "staffUniqueStateId=teacher"),
            mutator.mutate(Arrays.asList(v1), "staffUniqueStateId=teacher", principal, null));

    body.put("staffUniqueStateId", "staff");
    teacher = repo.create("staff", body, "staff");
    v1 = Mockito.mock(PathSegment.class);
    when(v1.getPath()).thenReturn("/staff");
    Assert.assertEquals("Endpoint should be rewritten to /staff/id",
            createMutatedContainer("/staff/" + teacher.getEntityId(), "staffUniqueStateId=staff"),
            mutator.mutate(Arrays.asList(v1), "staffUniqueStateId=staff", principal, null));
}
项目:secure-data-service    文件:UriMutatorTest.java   
@Test
// One part requests to the 'educationOrganizations' endpoint by a user with the APP_AUTHORIZE right
// from an admin application should NOT be mutated
public void testMutateSkipForAppAuthRightAdminApp() {
    SecurityUtil.setUserContext(SecurityUtil.UserContext.STAFF_CONTEXT);

    Map<String, Object> body = new HashMap<String, Object>();
    body.put("staffUniqueStateId", "staff");
    teacher = repo.create("staff", body, "staff");
    PathSegment v1 = Mockito.mock(PathSegment.class);
    when(v1.getPath()).thenReturn("/v1");
    PathSegment edorgs = Mockito.mock(PathSegment.class);
    when(edorgs.getPath()).thenReturn("/educationOrganizations");
    when(principal.getEntity()).thenReturn(staff);
    Map<String, Collection<GrantedAuthority>> edOrgRights = generateSimpleEdOrgRightsMap("theEdOrg", Right.APP_AUTHORIZE);
    when(principal.getEdOrgRights()).thenReturn(edOrgRights);
    MutatedContainer mutated = mutator.mutate(Arrays.asList(v1,edorgs), null, principal, ADMIN_APP_ID);
    System.out.println("The path is : " + mutated.getPath() + ", qparams : " + mutated.getQueryParameters());
    Assert.assertEquals("Endpoint should NOT have been rewritten to " + mutated.getPath(),
            createMutatedContainer(null, ""),
            mutated);
}