You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by bb...@apache.org on 2011/05/10 23:15:30 UTC

svn commit: r1101645 - in /incubator/clerezza/trunk/parent: platform.security.auth.basic/src/main/java/org/apache/clerezza/platform/security/auth/basic/ platform.security.auth.cookie/src/main/java/org/apache/clerezza/platform/security/auth/cookie/ plat...

Author: bblfish
Date: Tue May 10 21:15:30 2011
New Revision: 1101645

URL: http://svn.apache.org/viewvc?rev=1101645&view=rev
Log:
CLEREZZA-479: fixes the login problem where a user with an empty graph can log in.

Modified:
    incubator/clerezza/trunk/parent/platform.security.auth.basic/src/main/java/org/apache/clerezza/platform/security/auth/basic/BasicAuthentication.java
    incubator/clerezza/trunk/parent/platform.security.auth.cookie/src/main/java/org/apache/clerezza/platform/security/auth/cookie/CookieAuthentication.java
    incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/auth/FoafSslAuthentication.scala
    incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/UserUtil.java
    incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticatingFilter.java
    incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticationMethod.java

Modified: incubator/clerezza/trunk/parent/platform.security.auth.basic/src/main/java/org/apache/clerezza/platform/security/auth/basic/BasicAuthentication.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security.auth.basic/src/main/java/org/apache/clerezza/platform/security/auth/basic/BasicAuthentication.java?rev=1101645&r1=1101644&r2=1101645&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security.auth.basic/src/main/java/org/apache/clerezza/platform/security/auth/basic/BasicAuthentication.java (original)
+++ incubator/clerezza/trunk/parent/platform.security.auth.basic/src/main/java/org/apache/clerezza/platform/security/auth/basic/BasicAuthentication.java Tue May 10 21:15:30 2011
@@ -65,7 +65,7 @@ public class BasicAuthentication impleme
 	}
 
 	@Override
-	public Subject authenticate(Request request) throws LoginException, HandlerException {
+	public boolean authenticate(Request request, Subject subject) throws LoginException, HandlerException {
 		String[] authorizationValues = request.getHeaderValues(HeaderName.AUTHORIZATION);
 		if (authorizationValues != null && authorizationValues.length > 0) {
 			String authorization = authorizationValues[0];
@@ -80,12 +80,9 @@ public class BasicAuthentication impleme
 			}
 			try {
 				if (authenticationService.authenticateUser(userName, password)) {
-					Subject subj = UserUtil.getCurrentSubject();   //arguably getCurrentSubject should always return a subject
-					if (subj == null) {
-						subj = new Subject();
-					}
-					subj.getPrincipals().add(new PrincipalImpl(userName));
-					return subj;
+					subject.getPrincipals().remove(UserUtil.ANONYMOUS);
+					subject.getPrincipals().add(new PrincipalImpl(userName));
+					return true;
 				} else {
 					throw new LoginException(LoginException.PASSWORD_NOT_MATCHING);
 				}
@@ -93,7 +90,7 @@ public class BasicAuthentication impleme
 				throw new LoginException(LoginException.USER_NOT_EXISTING);
 			}
 		} else {
-			return null;
+			return false;
 		}
 	}
 

Modified: incubator/clerezza/trunk/parent/platform.security.auth.cookie/src/main/java/org/apache/clerezza/platform/security/auth/cookie/CookieAuthentication.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security.auth.cookie/src/main/java/org/apache/clerezza/platform/security/auth/cookie/CookieAuthentication.java?rev=1101645&r1=1101644&r2=1101645&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security.auth.cookie/src/main/java/org/apache/clerezza/platform/security/auth/cookie/CookieAuthentication.java (original)
+++ incubator/clerezza/trunk/parent/platform.security.auth.cookie/src/main/java/org/apache/clerezza/platform/security/auth/cookie/CookieAuthentication.java Tue May 10 21:15:30 2011
@@ -70,13 +70,13 @@ public class CookieAuthentication implem
 	}
 
 	@Override
-	public Subject authenticate(Request request) throws LoginException, HandlerException {
+	public boolean authenticate(Request request, Subject subject) throws LoginException, HandlerException {
 		String[] cookieValues = request.getHeaderValues(HeaderName.COOKIE);
 		if (cookieValues != null && cookieValues.length > 0) {
 			Map<String, Cookie> cookies = parseCookies(cookieValues[0]);		
 			Cookie authCookie = cookies.get(CookieLogin.AUTH_COOKIE_NAME);
 			if (authCookie == null) {
-				return null;
+				return false;
 			}
 
 			String authBase64 = authCookie.getValue();
@@ -90,12 +90,9 @@ public class CookieAuthentication implem
 			}
 			try {
 				if (authenticationService.authenticateUser(userName, password)){
-					Subject subj = UserUtil.getCurrentSubject();   //arguably getCurrentSubject should always return a subject
-					if (subj == null) {
-						subj = new Subject();
-					}
-					subj.getPrincipals().add(new PrincipalImpl(userName));
-					return subj;
+					subject.getPrincipals().remove(UserUtil.ANONYMOUS);
+					subject.getPrincipals().add(new PrincipalImpl(userName));
+					return true;
 				} else {
 					throw new LoginException(LoginException.PASSWORD_NOT_MATCHING);
 				}
@@ -103,7 +100,7 @@ public class CookieAuthentication implem
 				throw new LoginException(LoginException.USER_NOT_EXISTING);
 			}
 		} else {
-			return null;
+			return false;
 		}
 	}
 

Modified: incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/auth/FoafSslAuthentication.scala
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/auth/FoafSslAuthentication.scala?rev=1101645&r1=1101644&r2=1101645&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/auth/FoafSslAuthentication.scala (original)
+++ incubator/clerezza/trunk/parent/platform.security.foafssl/core/src/main/scala/org/apache/clerezza/foafssl/auth/FoafSslAuthentication.scala Tue May 10 21:15:30 2011
@@ -63,10 +63,10 @@ class FoafSslAuthentication extends Weig
 
 
   override
-  def authenticate(request: Request): Subject = {
+  def authenticate(request: Request, subject: Subject): Boolean = {
     val certificates = request.getCertificates()
     if ((certificates == null) || (certificates.length == 0)) {
-      return null
+      return false
     }
     val x509c = new X509Claim(certificates(0))
     x509c.verify(this)
@@ -76,17 +76,15 @@ class FoafSslAuthentication extends Weig
       addAgentToSystem(claim)
       claim.principal
     }
-	 var subj = UserUtil.getCurrentSubject();   //arguably getCurrentSubject should always return a subject
-	 if (subj == null) {
-		 subj = new Subject()
-	 }
-
-	 subj.getPrincipals().addAll(verified)
-    subj.getPublicCredentials.add(x509c)
-
-    return subj;
-
 
+	  subject.getPublicCredentials.add(x509c)
+	  if (verified.size > 0) {
+		  subject.getPrincipals().remove(UserUtil.ANONYMOUS)
+		  subject.getPrincipals().addAll(verified)
+		  return true
+	  } else {
+		  return false
+	  }
   }
 
   def addAgentToSystem(id: WebIDClaim) {

Modified: incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/UserUtil.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/UserUtil.java?rev=1101645&r1=1101644&r2=1101645&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/UserUtil.java (original)
+++ incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/UserUtil.java Tue May 10 21:15:30 2011
@@ -105,6 +105,7 @@ public class UserUtil {
 		return subject;
 	}
 
+	public static final Principal ANONYMOUS = new PrincipalImpl("anonymous");
 
 	public static Subject createSubject(String userName) {
 		return new Subject(true,

Modified: incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticatingFilter.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticatingFilter.java?rev=1101645&r1=1101644&r2=1101645&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticatingFilter.java (original)
+++ incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticatingFilter.java Tue May 10 21:15:30 2011
@@ -18,13 +18,11 @@
  */
 package org.apache.clerezza.platform.security.auth;
 
+import java.security.Principal;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.SortedSet;
-import java.util.TreeSet;
+import java.util.*;
 import javax.security.auth.Subject;
 import org.apache.clerezza.platform.security.UserUtil;
 import org.apache.felix.scr.annotations.Component;
@@ -57,19 +55,17 @@ public class AuthenticatingFilter implem
 	private final Logger logger = LoggerFactory.getLogger(AuthenticatingFilter.class);
 	private SortedSet<WeightedAuthenticationMethod> methodList =
 			new TreeSet<WeightedAuthenticationMethod>(new WeightedAuthMethodComparator());
-	public static final Subject ANONYMOUS_SUBJECT = UserUtil.createSubject("anonymous");
 
 	@Override
 	public void handle(final Request request, final Response response,
 			final Handler wrapped) throws HandlerException {
 
-		Subject subject = null;
+		final Subject subject = getSubject();
 		AuthenticationMethod authenticationMethod = null;
 		try {
 			for (Iterator<WeightedAuthenticationMethod> it = methodList.iterator(); it.hasNext();) {
 				authenticationMethod = it.next();
-				subject = authenticationMethod.authenticate(request);
-				if (subject != null) {
+				if (authenticationMethod.authenticate(request,subject)) {
 					break;
 				}
 			}
@@ -80,8 +76,9 @@ public class AuthenticatingFilter implem
 			return;
 		}
 
-		if (subject == null) {
-			subject = ANONYMOUS_SUBJECT;
+		Set<Principal> principals = subject.getPrincipals();
+		if (principals.size() == 0) {
+			principals.add(UserUtil.ANONYMOUS);
 		}
 		try {
 			Subject.doAsPrivileged(subject, new PrivilegedExceptionAction() {
@@ -108,6 +105,14 @@ public class AuthenticatingFilter implem
 		}
 	}
 
+	private Subject getSubject() {
+		Subject subject = UserUtil.getCurrentSubject();
+		if (subject== null) {
+			subject = new Subject();
+		}
+		return subject;
+	}
+
 	/**
 	 * Registers a <code>WeightedAuthenticationMethod</code>
 	 *

Modified: incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticationMethod.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticationMethod.java?rev=1101645&r1=1101644&r2=1101645&view=diff
==============================================================================
--- incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticationMethod.java (original)
+++ incubator/clerezza/trunk/parent/platform.security/src/main/java/org/apache/clerezza/platform/security/auth/AuthenticationMethod.java Tue May 10 21:15:30 2011
@@ -38,12 +38,13 @@ public interface AuthenticationMethod {
 	 * <code>LoginException</code> will be thrown. If no authentication
 	 * information are available null is returned.
 	 * @param request containing the information to authenticate a subject
-	 * @return Subject if this method authenticated, or null if not
+	 * @param subject to add authentication information to
+	 * @return true if this method did authenticate, false otherwise
 	 * @throws LoginException This exception is thrown in case
 	 * the login procedure failed.
 	 * @throws HandlerException
 	 */
-	public Subject authenticate(Request request)
+	public boolean authenticate(Request request, Subject subject)
 		throws LoginException, HandlerException;
 
 	/**