Package org.openxri.xml

Examples of org.openxri.xml.XRD


        "MaxRequests", "10"));
    int maxTotalBytes = Integer.parseInt(properties.getProperty(
        "MaxTotalBytes", "1048576")); // 1Mb
    int maxBytesPerRequest = Integer.parseInt(properties.getProperty(
        "MaxBytesPerRequest", "512000")); // 500Kb
    XRD equalsAuthority = XRD.parseXRD(properties
        .getProperty("EqualsAuthority"), false);
    XRD atAuthority = XRD.parseXRD(properties.getProperty("AtAuthority"),
        false);
    XRD bangAuthority = XRD.parseXRD(properties
        .getProperty("BangAuthority"), false);
    String supports = properties.getProperty("SupportedResMediaTypes");
 
    this.setMaxHttpRedirects(maxFollowRedirects);
    this.setMaxFollowRefs(maxFollowRefs);
View Full Code Here


    this.setAuthority("@", atAuthority);
    this.setAuthority("!", bangAuthority);
  }

  public XRD createErrorXRD(String query, String code, String msg) {
    XRD err = new XRD();
    err.setQuery(query);
    Status stat = new Status(code, msg);
    err.setStatus(stat);
    return err;
  }
View Full Code Here

  private XRI parseAbsoluteQXRIOrError(String qxri)
      throws PartialResolutionException {
    try {
      XRI xri = new XRI(qxri);
      if (xri.isRelative()) {
        XRD err = createErrorXRD(qxri, Status.INVALID_QXRI,
            "QXRI is not absolute.");
        throw new PartialResolutionException(err);
      }
      return xri;
    } catch (XRIParseException e) {
      XRD err = createErrorXRD(qxri, Status.INVALID_QXRI,
          "QXRI parse error: " + e.getMessage());
      throw new PartialResolutionException(err);
    } catch (Exception e) {
      XRD err = createErrorXRD(qxri, Status.PERM_FAIL,
          "Unexpected error while parsing input: " + e.getMessage());
      throw new PartialResolutionException(err);
    }
  }
View Full Code Here

      ArrayList selectedServices = new ArrayList();
     
      XRDS xrdsOut = processAuthRefs(selectedServices, parent, segment, trustType, followRefs, state);
     
      if (maxRequests >= 0 && state.getNumRequests() >= maxRequests) {
        XRD finalXRD = xrdsOut.getFinalXRD();
        if (finalXRD == null) {
          finalXRD = createErrorXRD(segment.toURINormalForm(true), Status.LIMIT_EXCEEDED, "Maximum of authority resolution requests exceeded");
          xrdsOut.add(finalXRD);
        }
        else {
          finalXRD.setStatus(new Status(Status.LIMIT_EXCEEDED, "Maximum of authority resolution requests exceeded"));
        }
        throw new PartialResolutionException(xrdsOut);       
      }
     
      ///// Try each URI in each selected service in turn
      Exception savedException = null;
      Iterator srvIterator = selectedServices.iterator();
      while (srvIterator.hasNext()) {
        Service srv = (Service)srvIterator.next();
       
        Iterator uriIterator = srv.getPrioritizedURIs().iterator();
          ///// try each selected service URI in turn (skip only if nothing was read)
          while (uriIterator.hasNext()) {
            SEPUri sepURI = (SEPUri)uriIterator.next();
            URI uri = sepURI.getURI();
           
            log.trace("resolveAuthSegment - trying URI='" + uri + "'");

            // skip non-HTTPS URIs if HTTPS was requested
            if (trustType.isHTTPS() && !uri.getScheme().equals(HTTPS)) {
              log.trace("resolveAuthSegment - skipping non HTTPS URI");
              continue;
            }
           
            URI newURI;
                try
                {
                    newURI = constructAuthResURI(uri.toString(), segment.toURINormalForm(true));               
                    log.trace("resolveAuthSegment - newURI = " + newURI);
                }
                catch (java.net.URISyntaxException oEx)
                {
                    // oops! invalid authority URI
                  savedException = new InvalidAuthorityURIException(
                        "Could not create URI to access based on " + uri +
                        ".  Trying to resolve " + segment, oEx);
                  continue; // try next URI
                }

                XRDS newXRDS = null;
                // now that we've constructed the new URI, try to return the stream from it
                try {
                  InputStream in = getDataFromURI(segment.toString(), newURI, trustType, state);
                    newXRDS = readXRDS(in);
                    log.debug("Got XRDS = " + newXRDS.toString());
                }
                catch (Exception e) {
                  log.trace("resolveAuthSegment - bad URI");
                  savedException = e;
                  continue;
                }
               
                // set ourselves up for the next multi-pass
                for (int d = 0; d < newXRDS.getNumChildren() && d < segment.getNumSubSegments(); d++)
                {
                    XRD xrd = newXRDS.getDescriptorAt(d);
                   
                    // status is not success
                    Status stat = xrd.getStatus();
                    if (stat == null) {
                      xrd = createErrorXRD(segment.getSubSegmentAt(d).toString(),
                        Status.UNEXPECTED_XRD, "Status code was missing in original XRD");
                    }
                   
                    // check the basic properties of the descriptor
                    boolean bValid = xrd.isValid();
                    if (!bValid) {
                      xrd = createErrorXRD(segment.getSubSegmentAt(d).toString(),
                        Status.UNEXPECTED_XRD, "Invalid XRD (stale?) received");
                    }

                    /*
                    // if we need to do trusted resolution checking
                    if (trustType.isSAML())
                    {
                        // Each descriptor must be validated independently as well as
                        // against the one that preceded (described) it in the
                        // descriptor chain.
                      // TODO: there could be more than one Authority Resolution Service
                      //       in the final XRD
                        bValid =
                            isTrustedDescriptor(
                                oAuth.getSubSegmentAt(iSubSeg), xrd,
                                oChain.getFinalXRIDescriptor().getFirstServiceByType(Tags.SERVICE_AUTH_RES));

                        // bail if the descriptor is not valid
                        if (!bValid)
                          throw new XRIResolutionException("Signature verification failed");

                    }
                    */

                    xrdsOut.add(xrd);
                   
                    if (!xrd.getStatus().getCode().equals(Status.SUCCESS)) {
                      throw new PartialResolutionException(xrdsOut);
                    }
                }

                // in case we are not able to parse the XRDS, or no XRD in there
                if (newXRDS.getNumChildren() < 1) {
                  XRD xrd = createErrorXRD(segment.getSubSegmentAt(0).toString(),
                        Status.AUTH_RES_ERROR, "No XRD element returned from endpoint");
                  xrdsOut.add(xrd);
                  throw new PartialResolutionException(xrdsOut);
                }
               
                if (newXRDS.getNumChildren() >= segment.getNumSubSegments()) {
                  // we're done!
                  return xrdsOut;
                }
               
                // not done yet, recursively resolve
               
                XRISegment remainder = segment.getRemainder(newXRDS.getNumChildren());
                XRDS remainderXRDS = null;
               
                try {
                  remainderXRDS = resolveAuthSegment(newXRDS.getDescriptorAt(newXRDS.getNumChildren()-1), remainder, trustType, followRefs, state);
                }
                catch (PartialResolutionException e) {
                  xrdsOut.addAll(e.getPartialXRDS());
                  throw new PartialResolutionException(xrdsOut);
                }

              xrdsOut.addAll(remainderXRDS);
                return xrdsOut;
          }

      }

     
      if (savedException != null) {
        savedException.printStackTrace();
        if (savedException instanceof XRIResolutionException) {
          ((XRIResolutionException)savedException).printUnderlyingStackTrace();
        }
       
        XRD err = createErrorXRD(segment.getSubSegmentAt(0).toString(), Status.AUTH_RES_ERROR, savedException.getMessage());
        xrdsOut.add(err);
        throw new PartialResolutionException(xrdsOut);
      }

      return xrdsOut;
View Full Code Here

  }
 
 
  public XRD createErrorXRD(String query, String code, String msg)
  {
    XRD err = new XRD();
    err.setQuery(query);
    Status stat = new Status(code, msg);
    err.setStatus(stat);
    return err;
  }
View Full Code Here

    // get the authority's XRD
   
    if (authority == null) return(null);

    XRD storeXrd = (XRD) authority.getXrd();
    if (storeXrd == null) return(null);
   
    // done

    return((XRD) storeXrd.clone());
  }
View Full Code Here

      throws PartialResolutionException
    {
      try {
        XRI xri = new XRI(qxri);
        if (xri.isRelative()) {
          XRD err = createErrorXRD(qxri, Status.INVALID_QXRI, "QXRI is not absolute.");
          throw new PartialResolutionException(err);
        }
        return xri;
      }
      catch (XRIParseException e) {
      XRD err = createErrorXRD(qxri, Status.INVALID_QXRI, "QXRI parse error: " + e.getMessage());
      throw new PartialResolutionException(err);
      }
      catch (Exception e) {
      XRD err = createErrorXRD(qxri, Status.PERM_FAIL, "Unexpected error while parsing input: " + e.getMessage());
      throw new PartialResolutionException(err);
      }
  }
View Full Code Here

   
  public static void main (String[] args) {
    Resolver resolver = new Resolver();
   
        XRD eqRoot = new XRD();
        Service eqAuthService = new Service();
        eqAuthService.addMediaType(Tags.CONTENT_TYPE_XRDS + ";trust=none", SEPElement.MATCH_ATTR_CONTENT, Boolean.FALSE);
        eqAuthService.addType(Tags.SERVICE_AUTH_RES);
        //eqAuthService.addURI("http://equal.beta.xri.net");
        eqAuthService.addURI("http://equal.xri.net");
        eqRoot.addService(eqAuthService);
        // System.out.println(eqRoot.toString());
       
        XRD atRoot = new XRD();
        Service atAuthService = new Service();
        atAuthService.addMediaType(Tags.CONTENT_TYPE_XRDS + ";trust=none", SEPElement.MATCH_ATTR_CONTENT, Boolean.FALSE);
        atAuthService.addType(Tags.SERVICE_AUTH_RES);
        //atAuthService.addURI("http://at.beta.xri.net/cgi-bin/xri");
        atAuthService.addURI("http://at.xri.net");
        //atAuthService.addURI("http://xria.2idi.com/@");
        atRoot.addService(atAuthService);
        // System.out.println(atRoot.toString());

        XRD bangRoot = new XRD();
        Service bangAuthService = new Service();
        bangAuthService.addMediaType(Tags.CONTENT_TYPE_XRDS + ";trust=none", SEPElement.MATCH_ATTR_CONTENT, Boolean.FALSE);
        bangAuthService.addType(Tags.SERVICE_AUTH_RES);
        bangAuthService.addURI("http://bang.beta.xri.net/cgi-bin/xri");
        bangRoot.addService(bangAuthService);
        // System.out.println(bangRoot.toString());

        resolver.setAuthority("=", eqRoot);
        resolver.setAuthority("@", atRoot);
        resolver.setAuthority("!", bangRoot);
View Full Code Here

    flags.setNoDefaultP(nodefault_p);
    flags.setNoDefaultT(nodefault_t);
   
    // set the request preferences on the resolver before querying.
    XRDS xrds = null;
    XRD xrd = null;
    try
    {
      if (sep) {
        if (resMediaType == null) {
          // see section 7.6 for special redirect rule
//          ArrayList<?> uris = this.resolver.resolveSEPToURIList(oXRI.toString(), trustType, serviceType, serviceMediaType, refs);
          ArrayList<?> uris = this.resolver.resolveSEPToURIList(oXRI, serviceType, serviceMediaType, flags, state);
          if (uris == null || uris.size() == 0) {
            sendResponse(response, HTTP_ERROR_CONTENT_TYPE, "SEP_NOT_FOUND(code=241): no url found", null);
            return;
          }
          String s = (String) uris.get(0);

          log.trace("Sending redirect to '" + s + "'");

          if (this.config.getSetting("RedirectCode").equals("301"))
            send301(response, s);
          else if (this.config.getSetting("RedirectCode").equals("303"))
            send303(response, s);
          else
            response.sendRedirect(s);
        }
        else if (resMediaType.isType(MimeType.URI_LIST)) {
//          String  text = this.resolver.resolveSEPToTextURIList(oXRI.toString(), trustType, serviceType, serviceMediaType, refs);
          String text = this.resolver.resolveSEPToTextURIList(oXRI, serviceType, serviceMediaType, flags, state);
          if (text.length() <= 0)
            sendResponse(response, HTTP_ERROR_CONTENT_TYPE, "SEP_NOT_FOUND(code=241): no url found", null);
          else
            sendResponse(response, resMediaType.getType(), text, null);
        }
        else if (resMediaType.isType(MimeType.XRDS_XML)) {
//          xrds = this.resolver.resolveSEPToXRDS(oXRI, trustType, serviceType, serviceMediaType, refs);
          xrds = this.resolver.resolveSEPToXRDS(oXRI, serviceType, serviceMediaType, flags, state);
          sendResponse(response, debug, resMediaType.getType(), xrds.toString(), trustType);
        }
        else if (resMediaType.isType(MimeType.XRD_XML)) {
//          xrd = this.resolver.resolveSEPToXRD(oXRI, trustType, serviceType, serviceMediaType, refs);
          xrd = this.resolver.resolveSEPToXRD(oXRI, serviceType, serviceMediaType, flags, state);
          sendResponse(response, debug, resMediaType.getType(), xrd.toResultString(), trustType);
        }
        else {
          // else - we should have taken care of it in checkSupportedMediaTypes
          log.error("processProxyRequest - should not reach here (sep=true)");
        }
      }
      else {
        //// authority resolution only
        if(resMediaType == null) {
          resMediaType = new MimeType(MimeType.XRDS_XML);
        }

        if (resMediaType.isType(MimeType.XRDS_XML)) {
//          xrds = this.resolver.resolveAuthToXRDS(oXRI, trustType, refs);
          xrds = this.resolver.resolveAuthToXRDS(oXRI, flags, state);
          sendResponse(response, debug, resMediaType.getType(), xrds.toString(), trustType);
          return;
        }
        else if (resMediaType.isType(MimeType.XRD_XML)) {
//          xrd = this.resolver.resolveAuthToXRD(oXRI, trustType, refs);
          xrd = this.resolver.resolveAuthToXRD(oXRI, flags, state);
          sendResponse(response, debug, resMediaType.getType(), xrd.toString(), trustType);
        }
        else if (resMediaType.isType(MimeType.URI_LIST)) {
          // ignore (must do SEP when text/uri-list is specified)
          log.warn("text/uri-list given but does not want to do service selection");
          // TODO: do we return an error?
View Full Code Here

        response.sendRedirect(this.bareXRINotFoundRedirect + URLEncoder.encode(qxri, "UTF-8"));
        return;
      }
    }
    response.setStatus(HttpServletResponse.SC_OK);
    XRD xrd = partialXRDS.getFinalXRD();
    String errMsg = "";
    if (xrd != null) {
      Status stat = xrd.getStatus();
      errMsg = "Error code: " + stat.getCode() + " - " + stat.getText();
    }

    if (resMediaType == null) {
      sendResponse(response, HTTP_ERROR_CONTENT_TYPE, errMsg, null);
    }
    else if (resMediaType.isType(MimeType.URI_LIST)) {
      errMsg = "# " + errMsg;
      sendResponse(response, HTTP_ERROR_CONTENT_TYPE, errMsg, trustType);
    }
    else if (resMediaType.isType(MimeType.XRDS_XML)) {
      sendResponse(response, isDebug, resMediaType.getType(), partialXRDS.toString(), trustType);
    }
    else if (resMediaType.isType(MimeType.XRD_XML)) {
      sendResponse(response, isDebug, resMediaType.getType(), xrd.toString(), trustType);
    }
    else {
      // else - we should have taken care of it in checkSupportedMediaTypes
      log.error("processProxyRequest - should not reach here (exception)");
    }
View Full Code Here

TOP

Related Classes of org.openxri.xml.XRD

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.