Author: lindner
Date: Tue Jan 13 17:42:19 2009
New Revision: 734297

URL: http://svn.apache.org/viewvc?rev=734297&view=rev
Log:
SHINDIG-851 | Authentication handlers can now set WWW-Authenticate headers

Modified:
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AnonymousAuthenticationHandler.java
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationHandler.java
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationServletFilter.java
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/UrlParameterAuthenticationHandler.java
    
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/oauth/OAuthConsumerRequestAuthenticationHandler.java

Modified: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AnonymousAuthenticationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AnonymousAuthenticationHandler.java?rev=734297&r1=734296&r2=734297&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AnonymousAuthenticationHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AnonymousAuthenticationHandler.java
 Tue Jan 13 17:42:19 2009
@@ -43,4 +43,9 @@
     }
     return null;
   }
+
+  @Override
+  public String getWWWAuthenticateHeader(String realm) {
+    return null;
+  }
 }
\ No newline at end of file

Modified: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationHandler.java?rev=734297&r1=734296&r2=734297&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationHandler.java
 Tue Jan 13 17:42:19 2009
@@ -37,4 +37,16 @@
    * @return A valid security token for the request, or null if it wasn't 
possible to authenticate.
    */
   SecurityToken getSecurityTokenFromRequest(HttpServletRequest request);
+
+    /**
+     * Return a String to be used for a WWW-Authenticate header. This will be 
called if the
+     * call to getSecurityTokenFromRequest returns null.
+     *
+     * If non-null/non-blank it will be added to the Response.
+     * See Section 6.1.3 of the Portable Contacts Specification
+     *
+     * @param realm the name of the realm to use for the authenticate header
+     * @return Header value for a WWW-Authenticate Header
+     */
+  String getWWWAuthenticateHeader(String realm);
 }

Modified: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationServletFilter.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationServletFilter.java?rev=734297&r1=734296&r2=734297&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationServletFilter.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/AuthenticationServletFilter.java
 Tue Jan 13 17:42:19 2009
@@ -29,6 +29,7 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 /**
  * Filter that attempts to authenticate an incoming HTTP request. It uses the 
guice injected
@@ -41,6 +42,9 @@
 public class AuthenticationServletFilter extends InjectedFilter {
   public static final String AUTH_TYPE_OAUTH = "OAuth";
 
+  // At some point change this to a container specific realm
+  private static final String realm = "shindig";
+
   private List<AuthenticationHandler> handlers;
 
   @Inject
@@ -53,21 +57,25 @@
   public void doFilter(ServletRequest request, ServletResponse response,
       FilterChain chain) throws IOException, ServletException {
 
-    if (!(request instanceof HttpServletRequest)) {
+    if (!(request instanceof HttpServletRequest && response instanceof 
HttpServletResponse)) {
       throw new ServletException("Auth filter can only handle HTTP");
     }
 
     HttpServletRequest req = (HttpServletRequest) request;
-
+    HttpServletResponse resp = (HttpServletResponse) response;
     for (AuthenticationHandler handler : handlers) {
       SecurityToken token = handler.getSecurityTokenFromRequest(req);
       if (token != null) {
         new 
AuthInfo(req).setAuthType(handler.getName()).setSecurityToken(token);
         chain.doFilter(req, response);
         return;
+      } else {
+          String authHeader = handler.getWWWAuthenticateHeader(realm);
+          if (authHeader != null) {
+              resp.addHeader("WWW-Authenticate", authHeader);
+          }
       }
     }
-
     // We did not find a security token so we will just pass null
     chain.doFilter(req, response);
   }

Modified: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/UrlParameterAuthenticationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/UrlParameterAuthenticationHandler.java?rev=734297&r1=734296&r2=734297&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/UrlParameterAuthenticationHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/auth/UrlParameterAuthenticationHandler.java
 Tue Jan 13 17:42:19 2009
@@ -62,6 +62,11 @@
     }
   }
 
+  @Override
+  public String getWWWAuthenticateHeader(String realm) {
+    return null;
+  }
+
   protected SecurityTokenDecoder getSecurityTokenDecoder() {
     return this.securityTokenDecoder;
   }

Modified: 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/oauth/OAuthConsumerRequestAuthenticationHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/oauth/OAuthConsumerRequestAuthenticationHandler.java?rev=734297&r1=734296&r2=734297&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/oauth/OAuthConsumerRequestAuthenticationHandler.java
 (original)
+++ 
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/core/oauth/OAuthConsumerRequestAuthenticationHandler.java
 Tue Jan 13 17:42:19 2009
@@ -71,7 +71,12 @@
     }
   }
 
-  private String getParameter(OAuthMessage requestMessage, String key) {
+    @Override
+    public String getWWWAuthenticateHeader(String realm) {
+       return String.format("OAuth realm=\"%s\"", realm);
+    }
+
+    private String getParameter(OAuthMessage requestMessage, String key) {
     try {
       return requestMessage.getParameter(key);
     } catch (IOException e) {


Reply via email to