Examples of XRDS


Examples of org.openxri.xml.XRDS

      ResolverState state) throws PartialResolutionException {
    log.trace("resolveViaProxy('" + qxri + ", serviceType=" + serviceType
        + ", serviceMediaType=" + serviceMediaType + ", flags: "
        + flags + ")");

    XRDS xrdsOut = new XRDS();

    // build the new URI for the proxy
    URI newURI = null;
    try {
      StringBuffer query = new StringBuffer();
      if (serviceType != null) {
        query.append("_xrd_t=");
        query.append(URLEncoder.encode(serviceType, "UTF-8"));
        query.append('&');
      }

      if (serviceMediaType != null) {
        query.append("_xrd_m=");
        query.append(URLEncoder.encode(serviceMediaType, "UTF-8"));
        query.append('&');
      }

      query.append("_xrd_r=");
      query.append(Tags.CONTENT_TYPE_XRDS);
      query.append(';');
      query.append(flags.getTrustParameters());
      query.append(";sep=");
      query.append(sepSelect);
      query.append(";ref=");
      query.append(flags.isRefs());
      query.append('&');

      if (proxyURI.getQuery() != null) {
        query.append(proxyURI.getQuery());
      }

      StringBuffer uriBuf = new StringBuffer();
      uriBuf.append(proxyURI.getScheme());
      uriBuf.append("://");
      uriBuf.append(proxyURI.getAuthority());
      uriBuf.append(proxyURI.getPath());
      if (uriBuf.charAt(uriBuf.length() - 1) != '/')
        uriBuf.append('/');

      StringBuffer qxriNoQuery = new StringBuffer(qxri.getAuthorityPath().toIRINormalForm());
      if (sepSelect) {
        qxriNoQuery.append(qxri.getXRIPath().toURINormalForm());
      }
     
      uriBuf.append(URLEncoder.encode(qxriNoQuery.toString(), "UTF-8"));
      uriBuf.append('?');
      uriBuf.append(query);

      log.trace("resolveViaProxy - constructed proxy query URI '"
          + uriBuf + "'");

      newURI = new URI(uriBuf.toString());
    } catch (java.net.URISyntaxException oEx) {
      XRD err = createErrorXRD(qxri.getAuthorityPath().toURINormalForm(),
          Status.INVALID_INPUT,
          "Unable to construct URI to access proxy resolution service");
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    } catch (UnsupportedEncodingException e) {
      // thrown from URLEncoder.encode() - this should never happen since the
      // US-ASCII encoding should be supported on every computer or so we hope :)
      XRD err = createErrorXRD(qxri.getAuthorityPath().toURINormalForm(),
          Status.INVALID_INPUT, "Charset not supported");
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    } catch (Exception e) {
      XRD err = createErrorXRD(qxri.getAuthorityPath().toURINormalForm(),
          Status.PERM_FAIL,
          "Unexpected error while constructing proxy URI: "
              + e.getMessage());
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    InputStream in = null;
    try {
      // try to get the data from it
      in = getDataFromURI(newURI, qxri.toURINormalForm(), flags, state);
      XRDS xrds = readXRDS(in);
      XRD finalXRD = xrds.getFinalXRD();

      String code = finalXRD.getStatusCode();
      if ((flags.isRefs() && !code.equals(Status.SUCCESS) && !code
          .equals(Status.REF_NOT_FOLLOWED))
          || !code.equals(Status.SUCCESS)) {
View Full Code Here

Examples of org.openxri.xml.XRDS

  protected XRDS processRedirects(XRI qxri, XRD parent, ResolverFlags flags, ResolverState state)
    throws PartialResolutionException
  {
    log.trace("processRedirects (qxri=" + qxri + ")");
   
    XRDS xrdsOut = new XRDS();
    XRDS tmpXRDS;
    List redirects = parent.getPrioritizedRedirects();
    Iterator it = redirects.iterator();
   
    // there must be some redirects!
    if (!it.hasNext())
View Full Code Here

Examples of org.openxri.xml.XRDS

   * @throws PartialResolutionException
   */
  protected XRDS fetchAuthXRDSHelper(XRI qxri, URI uri, XRD parent, Service parentService, XRISegment segment, ResolverFlags flags, ResolverState state)
    throws PartialResolutionException
  {
    XRDS xrdsOut = new XRDS();
    String query = segment.getSubSegmentAt(0).toURINormalForm(true);

    URI newURI;
    try {
      newURI = constructAuthResURI(uri.toString(), segment.toURINormalForm(true));
      log.trace("fetchAuthXRDS - newURI = " + newURI);
    }
    catch (java.net.URISyntaxException oEx) {
      throw makeResolutionException(xrdsOut, query, Status.AUTH_RES_ERROR, "Invalid URI for authority resolution service");
    }

    XRDS tmpXRDS = null;
    // now that we've constructed the new URI, try to return the stream from it
    try {
      InputStream in = getDataFromURI(newURI, segment.toString(), flags, state);
      tmpXRDS = readXRDS(in);
      log.debug("fetchAuthXRDS - got XRDS = " + tmpXRDS.toString());
    } catch (IOException e) {
      log.trace("fetchAuthXRDS - got IOException from URI " + newURI);
      throw makeResolutionException(xrdsOut, query, Status.NETWORK_ERROR, "Networking error encountered");
    } catch (Exception e) {
      log.trace("fetchAuthXRDS - " + e);
      throw makeResolutionException(xrdsOut, query, Status.AUTH_RES_ERROR, e.getMessage());
    }
   
    //// sanity checks
   
    // there should be at least one child element
    if (tmpXRDS.getNumChildren() < 1) {
      throw makeResolutionException(xrdsOut, query, Status.INVALID_XRDS, "Invalid XRDS document");
    }
   
    if (tmpXRDS.getNumChildren() > segment.getNumSubSegments()) {
      throw makeResolutionException(xrdsOut, query, Status.INVALID_XRDS, "Invalid XRDS document: too many XRD elements returned");     
    }
   

    XRD prevXRD = parent;

    // check each child
    for (int d = 0; d < tmpXRDS.getNumChildren(); d++) {
      if (!tmpXRDS.isXRDAt(d))
        throw makeResolutionException(xrdsOut, query, Status.INVALID_XRDS, "Authority XRDS document should not contain XRDS element");

      XRD xrd = tmpXRDS.getDescriptorAt(d);
      xrdsOut.add(xrd);

      // status is not success
      ServerStatus sstat = xrd.getServerStatus();
      Status stat;
View Full Code Here

Examples of org.openxri.xml.XRDS

   * @return
   * @throws PartialResolutionException
   */
  protected XRDS fetchAuthXRDS(XRI qxri, XRD parent, List authResServices, XRISegment segment, ResolverFlags flags, ResolverState state) throws PartialResolutionException
  {
    XRDS xrdsOut = null;
    XRD errXRD = null;
    String query = segment.getSubSegmentAt(0).toURINormalForm(true);
   
    //// TODO verify synonyms

    ///// Try each URI in each selected service in turn
    Exception savedException = null;
    Iterator srvIterator = authResServices.iterator();
    while (srvIterator.hasNext()) {     
      Service srv = (Service) srvIterator.next();
      Iterator uriIterator = srv.getPrioritizedURIs().iterator();
     
      while (uriIterator.hasNext()) {
        SEPUri sepURI = (SEPUri) uriIterator.next();
        URI uri = sepURI.getURI();

        log.trace("fetchAuthXRDS - trying URI='" + uri + "'");

        // skip non-HTTPS URIs if HTTPS was requested
        if (flags.isHttps() && !uri.getScheme().equals(HTTPS)) {
          log.trace("fetchAuthXRDS - skipping non HTTPS URI");
          continue;
        }

        try {
          xrdsOut = fetchAuthXRDSHelper(qxri, uri, parent, srv, segment, flags, state);
          // if no error, return immediately
          return xrdsOut;
        }
        catch (PartialResolutionException e) {
          xrdsOut = e.getPartialXRDS();
        }
      }
    }

    if (xrdsOut == null) { // no appropriate URI found
      xrdsOut = new XRDS();
      String code = flags.isHttps()? Status.TRUSTED_RES_ERROR : Status.AUTH_RES_ERROR;
      xrdsOut.add(createErrorXRD(query, code, "No URI found for authority resolution"));
    }
    throw new PartialResolutionException(xrdsOut);
  }
View Full Code Here

Examples of org.openxri.xml.XRDS

      ResolverFlags flags, ResolverState state)
      throws PartialResolutionException
  {
    log.trace("resolveAuthSegment - segment='" + segment + "'");

    XRDS xrdsOut = new XRDS();
    XRDS tmpXRDS = null;
    CanonicalID parentCID = null;
    boolean authResComplete = false;
    ResolverFlags currentFlags = null; // this is only for overriding by HttpsBypassAuthority settings

    String parentXRI = ((XRIAuthority)qxri.getAuthorityPath()).getRootAuthority();
    XRISegment remainingSegment = segment;
   
    while (remainingSegment != null && remainingSegment.getNumSubSegments() > 0) {
      // clone flags
      currentFlags = new ResolverFlags(flags);
     
      // more subsegments to resolve
      String query = remainingSegment.getSubSegmentAt(0).toURINormalForm(true);

      log.debug("resolveAuthSegment - resolving subsegment '" + query + "'");
     
      checkMaxRequests(xrdsOut, query, state);
     
      // if HTTPS is requested and what we are resolving is allowed to bypass HTTPS, we turn off the HTTPS flag
      // for auth-res service selection
      if (currentFlags.isHttps() && isHttpsBypassAuthority(parentXRI)) {
        log.debug("Bypassing HTTPS for " + parentXRI);
        currentFlags.setHttps(false);
      }
     
      //// perform service selection
      String authResMediaType = Tags.CONTENT_TYPE_XRDS + ";" + currentFlags.getTrustParameters();
      List authResServices = selectServices(parent.getServices(), Tags.SERVICE_AUTH_RES, null, authResMediaType, currentFlags);
      if (authResServices.size() < 1) {
        log.debug("resolveAuthSegment - no authority resolution service found!");
        throw makeResolutionException(
          xrdsOut,
          query,
          Status.AUTH_RES_NOT_FOUND,
          "Authority Resolution Service Not Found"
        );
      }

      try {
        // retrieve XRDS documents for the given subsegment
        log.trace("resolveAuthSegment - fetching XRDS");
        tmpXRDS = fetchAuthXRDS(qxri, parent, authResServices, remainingSegment, currentFlags, state);
      }
      catch (PartialResolutionException e) {
        log.trace("got PRE: " + e.getPartialXRDS());
        log.trace("xrdsOut.n = " + xrdsOut.getNumChildren() + ", partialXRDS.n=" + e.getPartialXRDS().getNumChildren());
        xrdsOut.add(e.getPartialXRDS());
        throw new PartialResolutionException(xrdsOut);       
      }
     
      //// add the subsegments
      xrdsOut.addAll(tmpXRDS);
     
      //// replace parent XRD
      parent = tmpXRDS.getFinalXRD();
     
      for (int k = 0; k < tmpXRDS.getNumChildren(); k++) {
        XRISubSegment subseg = remainingSegment.getSubSegmentAt(k);
        parentXRI = parentXRI + subseg;
      }
     
      remainingSegment = remainingSegment.getRemainder(tmpXRDS.getNumChildren());

      tmpXRDS = null;     
      try {
        if (parent.getNumRedirects() > 0) {
          log.debug("resolveAuthSegment - processing Redirect(s)");
          tmpXRDS = processRedirects(qxri, parent, currentFlags, state);
          xrdsOut.addAll(tmpXRDS);
          // replace parent
          parent = tmpXRDS.getFinalXRD();
        }
        else if (parent.getNumRefs() > 0) {
          if (!currentFlags.isRefs()) {
            throw makeResolutionException(
              xrdsOut,
              query,
              Status.REF_NOT_FOLLOWED,
              "Ref not followed");
          }
          log.debug("resolveAuthSegment - processing Ref(s)");
          tmpXRDS = processRefs(parent, currentFlags, state);
          xrdsOut.addAll(tmpXRDS);
          // replace parent
          parent = tmpXRDS.getFinalXRD();
        }       
      }
      catch (PartialResolutionException e) {
        xrdsOut.addAll(e.getPartialXRDS());
        log.debug("resolveAuthSegment - got PRE while processing Ref or Redirect");
View Full Code Here

Examples of org.openxri.xml.XRDS

      Resolver resolver = setupResolver();
      qxri = "@xrid*test*live.unit.tests*0003-badcid*kid";     
      XRI xri = XRI.fromIRINormalForm(qxri);
     
      ResolverFlags flags = new ResolverFlags();
      XRDS xrds = resolver.resolveAuthToXRDS(xri, flags, new ResolverState());
      // System.out.println(xrds);

      assertTrue("Expected 5 XRDs", xrds.getNumChildren() == 5);
      assertTrue("subseg[3] should be *0003-badcid", xrds.getDescriptorAt(3).getQuery().equals("*0003-badcid"));
     
      Status s3 = xrds.getDescriptorAt(3).getStatus();
      assertTrue("subseg[3].status.cid should be 'failed'", s3.getCID().equals("failed"));
     
      Status s4 = xrds.getDescriptorAt(4).getStatus();
      assertTrue("subseg[4].status.cid should be 'failed'", s4.getCID().equals("failed"));

     
     
      qxri = "@xrid*test*live.unit.tests*0001-simple";
      xri = XRI.fromIRINormalForm(qxri);
      xrds = resolver.resolveAuthToXRDS(xri, flags, new ResolverState());
      assertTrue("Expected 4 XRDs", xrds.getNumChildren() == 4);
      XRD xrd3 = xrds.getDescriptorAt(3);
      assertTrue("subseg[3] should be *0001-simple", xrd3.getQuery().equals("*0001-simple"));
      assertTrue("subseg[3] should be CID verified", xrd3.getStatus().getCID().equals(Status.CID_VERIFIED));
      assertTrue("subseg[3] should be CEID verified", xrd3.getStatus().getCEID().equals(Status.CID_VERIFIED));
    }
    catch (Exception e) {
View Full Code Here

Examples of org.openxri.xml.XRDS

      Resolver resolver = setupResolver();
      qxri = "@xrid*test*live.unit.tests*0002-ref";
      XRI xri = XRI.fromIRINormalForm(qxri);
     
      ResolverFlags flags = new ResolverFlags();
      XRDS xrds = resolver.resolveAuthToXRDS(xri, flags, new ResolverState());
      assertTrue("There should be 5 child elements", xrds.getNumChildren() == 5);
      assertTrue("The last child should be an XRDS element because it followed a Ref", xrds.isXRDSAt(4));
    }
    catch (PartialResolutionException e) {
      fail("Not expecting PRE. PartialXRDS=" + e.getPartialXRDS());
    }
    catch (Exception e) {
View Full Code Here

Examples of org.openxri.xml.XRDS

    try {
      Resolver resolver = setupResolver();
      XRI xri = XRI.fromIRINormalForm(qxri);
     
      ResolverFlags flags = new ResolverFlags();
      XRDS xrds = resolver.resolveSEPToXRDS(xri, null, null, flags, new ResolverState());
      System.out.println(xrds);
      assertTrue("There should be 8 child elements", xrds.getNumChildren() == 8);
      assertTrue("The first child should be an XRD element", xrds.isXRDAt(0));
      assertTrue("The second child should be an XRD element", xrds.isXRDAt(1));
      assertTrue("The third child should be an XRD element", xrds.isXRDAt(2));
      assertTrue("The fourth child should be an XRD element", xrds.isXRDAt(3));

      assertTrue("The fifth child should be an XRDS element because it followed a Redirect", xrds.isXRDSAt(4));
      XRDS redirXRDS = xrds.getXRDSAt(4);
      assertTrue("Wrong redirect followed in the fifth child", redirXRDS.getRedirect().equals("http://auth.xrid.net/!330/"));
     
      assertTrue("The fifth child should have 2 children", redirXRDS.getNumChildren() == 2);
      assertTrue("The fifth child's first child should be an XRD", redirXRDS.isXRDAt(0));
      assertTrue("The fifth child's second child should be an XRDS", redirXRDS.isXRDSAt(1));
      redirXRDS = redirXRDS.getXRDSAt(1);
      assertTrue("Wrong redirect followed in the fifth child's second child", redirXRDS.getRedirect().equals("http://does.not.exist/"));
      assertFalse("Fifth child should have failed", redirXRDS.getFinalXRD().getStatusCode().equals(Status.SUCCESS));
     
      assertTrue("The sixth child should be an XRDS element because it followed a Redirect", xrds.isXRDSAt(5));
      redirXRDS = xrds.getXRDSAt(5);
      assertTrue("Wrong redirect followed in the sixth child", redirXRDS.getRedirect().equals("http://auth.xrid.net/!333/"));
     

      assertTrue("The seventh child should be an XRDS element because it followed a Redirect", xrds.isXRDSAt(6));
      redirXRDS = xrds.getXRDSAt(6);
      assertTrue("Wrong redirect followed on the seventh child", redirXRDS.getRedirect().equals("http://auth.xrid.net/!331/"));
      assertTrue("Seventh child should have succeeded", redirXRDS.getFinalXRD().getStatusCode().equals(Status.SUCCESS));
     
      assertTrue("The eighth child should be an XRDS element because it followed a Service-level Redirect", xrds.isXRDSAt(7));
      redirXRDS = xrds.getXRDSAt(7);
      assertTrue("Wrong redirect followed on the eighth child", redirXRDS.getRedirect().equals("http://auth.xrid.net/!332/"));
      assertTrue("Eighth child should have succeeded", redirXRDS.getFinalXRD().getStatusCode().equals(Status.SUCCESS));
      assertTrue("Should be one selected Service on eighth child", redirXRDS.getFinalXRD().getSelectedServices().getList().size() == 1);
      Service srv = (Service)redirXRDS.getFinalXRD().getSelectedServices().getList().get(0);
      assertTrue("In correct URI in selected service on eighth child", srv.getURIAt(0).getUriString().equals("http://my.blog.com"));
    }
    catch (Exception e) {
      e.printStackTrace();
      fail("Not expecting exception: " + e);
View Full Code Here

Examples of org.openxri.xml.XRDS

            if (uri.getPath().indexOf("!nonexistent") >= 0)
            {
                XRD xrd = new XRD();
                xrd.setQuery("!nonexistent");
                xrd.setStatus(new Status(Status.AUTH_RES_NOT_FOUND));
                XRDS xrds = new XRDS();
                xrds.add(xrd);
                return new ByteArrayInputStream(xrds.toString().getBytes());
            }

            XRDS oDescs = new XRDS();

            // just the same response always
            XRD oFoo = new XRD();
            oFoo.setQuery("!foo");
            oFoo.setStatus(new Status(Status.SUCCESS));
            oDescs.add(oFoo);

            XRD oBar = new XRD();
            oBar.setQuery("!bar");
            oBar.setStatus(new Status(Status.SUCCESS));
            oDescs.add(oBar);

            if (uri.getPath().indexOf("!baz") > 0) {
              XRD baz = new XRD();
              baz.setQuery("!baz");
              baz.setStatus(new Status(Status.AUTH_RES_NOT_FOUND, "Not found"));
                oDescs.add(baz);
            }
            return new ByteArrayInputStream(oDescs.toString().getBytes());

        } // getDataFromURI()
View Full Code Here

Examples of org.openxri.xml.XRDS

                return null;

            XRD oDesc = new XRD();
            XRI oExternal = new XRI("xri://@foo");
            oDesc.addRef(new Ref(oExternal.toString()));
            XRDS oDescs = new XRDS();
            oDescs.add(oDesc);
           
      state.pushResolved(oURI.toString(), flags.toString(), oDesc.toString(), oURI);

            return new ByteArrayInputStream(oDescs.toString().getBytes());

        }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.