Author: lindner
Date: Mon May 17 05:18:51 2010
New Revision: 944974

URL: http://svn.apache.org/viewvc?rev=944974&view=rev
Log:
SHINDIG-1328 | support relative URLs for oauth service declaration

Modified:
    
shindig/trunk/java/common/src/main/java/org/apache/shindig/common/xml/XmlUtil.java
    
shindig/trunk/java/common/src/test/java/org/apache/shindig/common/xml/XmlUtilTest.java
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/OAuthSpecTest.java

Modified: 
shindig/trunk/java/common/src/main/java/org/apache/shindig/common/xml/XmlUtil.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/common/src/main/java/org/apache/shindig/common/xml/XmlUtil.java?rev=944974&r1=944973&r2=944974&view=diff
==============================================================================
--- 
shindig/trunk/java/common/src/main/java/org/apache/shindig/common/xml/XmlUtil.java
 (original)
+++ 
shindig/trunk/java/common/src/main/java/org/apache/shindig/common/xml/XmlUtil.java
 Mon May 17 05:18:51 2010
@@ -194,15 +194,19 @@ public class XmlUtil {
    * or https URI.
    * @param node
    * @param attr
-   * @param def
-   * @return the parsed uri, or def if the attribute is not a valid http or
+   * @param base
+   *...@param def  @return the parsed uri, or def if the attribute is not a 
valid http or
    * https URI.
    */
-  public static Uri getHttpUriAttribute(Node node, String attr, Uri def) {
+  public static Uri getHttpUriAttribute(Node node, String attr, Uri base, Uri 
def) {
     Uri uri = getUriAttribute(node, attr, def);
     if (uri == null) {
       return def;
     }
+    // resolve to base before checking
+    if (base != null) {
+      uri = base.resolve(uri);
+    }
     if (!"http".equalsIgnoreCase(uri.getScheme()) && 
!"https".equalsIgnoreCase(uri.getScheme())) {
       return def;
     }
@@ -213,11 +217,12 @@ public class XmlUtil {
    * Retrieves an attribute as a URI, and verifies that the URI is an http or 
https URI.
    * @param node
    * @param attr
+   * @param base
    * @return the parsed uri, or null if the attribute is not a valid http or
    * https URI.
    */
-  public static Uri getHttpUriAttribute(Node node, String attr) {
-    return getHttpUriAttribute(node, attr, null);
+  public static Uri getHttpUriAttribute(Node node, String attr, Uri base) {
+    return getHttpUriAttribute(node, attr, base, null);
   }
 
   /**

Modified: 
shindig/trunk/java/common/src/test/java/org/apache/shindig/common/xml/XmlUtilTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/common/src/test/java/org/apache/shindig/common/xml/XmlUtilTest.java?rev=944974&r1=944973&r2=944974&view=diff
==============================================================================
--- 
shindig/trunk/java/common/src/test/java/org/apache/shindig/common/xml/XmlUtilTest.java
 (original)
+++ 
shindig/trunk/java/common/src/test/java/org/apache/shindig/common/xml/XmlUtilTest.java
 Mon May 17 05:18:51 2010
@@ -106,9 +106,9 @@ public class XmlUtilTest {
 
   @Test
   public void testHttpUriAttribute() {
-    assertEquals(HTTPS_URI_VALUE, XmlUtil.getHttpUriAttribute(node, 
HTTPS_URI_ATTR));
-    assertNull(XmlUtil.getHttpUriAttribute(node, FTP_URI_ATTR));
-    assertEquals(HTTPS_URI_VALUE, XmlUtil.getHttpUriAttribute(node, 
FTP_URI_ATTR, HTTPS_URI_VALUE));
+    assertEquals(HTTPS_URI_VALUE, XmlUtil.getHttpUriAttribute(node, 
HTTPS_URI_ATTR, null));
+    assertNull(XmlUtil.getHttpUriAttribute(node, FTP_URI_ATTR, null));
+    assertEquals(HTTPS_URI_VALUE, XmlUtil.getHttpUriAttribute(node, 
FTP_URI_ATTR, null, HTTPS_URI_VALUE));
   }
 
   @Test(expected=XmlException.class)

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java?rev=944974&r1=944973&r2=944974&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/OAuthService.java
 Mon May 17 05:18:51 2010
@@ -207,7 +207,7 @@ public class OAuthService {
   }
 
   Uri parseAuthorizationUrl(Element child, Uri base) throws 
SpecParserException {
-    Uri url = XmlUtil.getHttpUriAttribute(child, URL_ATTR);
+    Uri url = XmlUtil.getHttpUriAttribute(child, URL_ATTR, base);
     if (url == null) {
       throw new SpecParserException("OAuth/Service/Authorization @url is not 
valid: " +
           child.getAttribute(URL_ATTR));
@@ -217,7 +217,7 @@ public class OAuthService {
 
 
   EndPoint parseEndPoint(String where, Element child, Uri base) throws 
SpecParserException {
-    Uri url = XmlUtil.getHttpUriAttribute(child, URL_ATTR);
+    Uri url = XmlUtil.getHttpUriAttribute(child, URL_ATTR, base);
     if (url == null) {
       throw new SpecParserException("Not an HTTP url: " + 
child.getAttribute(URL_ATTR));
     }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/OAuthSpecTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/OAuthSpecTest.java?rev=944974&r1=944973&r2=944974&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/OAuthSpecTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/OAuthSpecTest.java
 Mon May 17 05:18:51 2010
@@ -42,6 +42,21 @@ public class OAuthSpecTest {
   }
 
   @Test
+  public void testOAuthRelativeUrl() throws Exception {
+    String xml = "<OAuth><Service>" +
+      "<Request url='/request'/>" +
+      "<Access url='/access'/>" +
+      "<Authorization url='/authorize'/>" +
+      "</Service></OAuth>";
+    OAuthSpec oauth = new OAuthSpec(XmlUtil.parse(xml), SPEC_URL);
+    assertEquals(1, oauth.getServices().size());
+    OAuthService service = oauth.getServices().get("");
+    assertEquals(service.getRequestUrl().url.toString(), 
"http://example.org/request";);
+    assertEquals(service.getAuthorizationUrl().toString(), 
"http://example.org/authorize";);
+    assertEquals(service.getAccessUrl().url.toString(), 
"http://example.org/access";);
+  }
+
+  @Test
   public void testOAuthSpec_noservice() throws Exception {
     String xml = "<OAuth/>";
     OAuthSpec oauth = new OAuthSpec(XmlUtil.parse(xml), SPEC_URL);


Reply via email to