Package org.openxri.xml

Examples of org.openxri.xml.XRDS


      throws PartialResolutionException {
    log.trace("resolveSEPToXRD('" + qxri + "', trustType=" + trustType
        + ", sepType=" + sepType + ", sepMediaType=" + sepMediaType
        + ", followRefs=" + followRefs + ")");

    XRDS xrds = resolveSEPToXRDS(qxri, trustType, sepType, sepMediaType,
        followRefs, state);
    return xrds.getFinalXRD();
  }
View Full Code Here


  public XRDS resolveAuthority(XRI qxri, ResolverFlags flags, ResolverState state)
    throws PartialResolutionException
  {
    log.trace("resolveAuthority(s'" + qxri + "', flags: " + flags + ")");

    XRDS xrdsOut = new XRDS();
    xrdsOut.setRef("xri://" + qxri.getAuthorityPath().toString());

    // determine the authority type
    AuthorityPath ap = qxri.getAuthorityPath();
    try {
      XRDS newXRDS;
      if (ap instanceof XRIAuthority)
        newXRDS = resolveXRIAuth(qxri, (XRIAuthority)ap, flags, state);
      else if (ap instanceof IRIAuthority)
        newXRDS = resolveIRIAuth((IRIAuthority) ap, flags, state);
      else
View Full Code Here

      throw new RuntimeException("First subsegment of '" + xriAuth + "' is null");
    }

    XRD rootXRD = getAuthority(rootAuth);
    if (rootXRD == null) {
      XRDS xrdsOut = new XRDS();
      // unknown root
      XRD err = createErrorXRD(
        xriAuth.toURINormalForm(),
        Status.UNKNOWN_ROOT,
        "Authority '" + rootAuth + "' is not configured"
      );
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    XRISegment segment = xriAuth.getXRISegment();
View Full Code Here

  protected XRDS resolveIRIAuth(IRIAuthority iriAuth, ResolverFlags flags, ResolverState state)
    throws PartialResolutionException
  {
    log.trace("resolveIRIAuth('" + iriAuth + "', flags: " + flags + ")");

    XRDS xrdsOut = new XRDS();

    if (flags.isSaml()) {
      XRD err = createErrorXRD(iriAuth.toURINormalForm(),
          Status.NOT_IMPLEMENTED,
          "SAML is not supported for an IRI authority");
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    // only use http for insecure and https for secure
    String scheme = flags.isHttps() ? "https" : "http";

    URI uri = null;
    try {
      uri = new URI(scheme, iriAuth.getIUserInfo(), iriAuth.getIHost(),
          iriAuth.getPort(), null, null, null);
    } catch (java.net.URISyntaxException e) {
      XRD err = createErrorXRD(iriAuth.toURINormalForm(),
          Status.INVALID_INPUT,
          "Unable to construct URI to resolve IRI authority: "
              + e.getMessage());
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    // now that we've constructed the new URI, try to return the stream from it
    InputStream in = null;
    try {
      in = getDataFromURI(uri, uri.toString(), flags, state);
    } catch (Exception e) {
      XRD err = createErrorXRD(iriAuth.toURINormalForm(),
          Status.NETWORK_ERROR,
          "Network error occurred while resolving IRI authority: "
              + e.getMessage());
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    if (in == null) {
      throw new RuntimeException(
          "resolveIRIAuth - getDataFromURI returned null");
    }

    // read the descriptors
    try {
      xrdsOut = readXRDS(in);
      if (xrdsOut.getNumChildren() != 1) {
        XRD err = createErrorXRD(iriAuth.toURINormalForm(),
            Status.UNEXPECTED_RESPONSE,
            "Expected 1 XRD from IRI authority, got "
                + xrdsOut.getNumChildren() + " instead");
        xrdsOut.add(err);
        throw new PartialResolutionException(xrdsOut);
      }
    } catch (XRIResolutionException e) {
      XRD err = createErrorXRD(iriAuth.toURINormalForm(),
          Status.UNEXPECTED_RESPONSE,
          "Error reading XRDS from server: " + e.getMessage());
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    // add the descriptor, but only if is is valid
    XRD xrd = xrdsOut.getDescriptorAt(0);
    if (!xrd.isValid()) {
      XRD err = createErrorXRD(iriAuth.toURINormalForm(),
          Status.UNEXPECTED_XRD, "XRD is invalid");
      xrdsOut.add(err);
      throw new PartialResolutionException(xrdsOut);
    }

    return xrdsOut;
  }
View Full Code Here

      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

  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

   * @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

   * @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

      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

      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

TOP

Related Classes of org.openxri.xml.XRDS

Copyright © 2018 www.massapicom. 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.