]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/auth/HttpSessionLoginModule.java
[maven-release-plugin] prepare for next development iteration
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / auth / HttpSessionLoginModule.java
index b450401ff015bd5aaf268f9b000b065f5e87296f..9e05ac95aec0212b320dccb3424a573b06de83cc 100644 (file)
@@ -13,6 +13,7 @@ import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.security.auth.login.LoginException;
 import javax.security.auth.spi.LoginModule;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.logging.Log;
@@ -33,6 +34,7 @@ public class HttpSessionLoginModule implements LoginModule {
        private Map<String, Object> sharedState = null;
 
        private HttpServletRequest request = null;
+       private HttpServletResponse response = null;
 
        private BundleContext bc;
 
@@ -70,15 +72,15 @@ public class HttpSessionLoginModule implements LoginModule {
                        // authorization = (Authorization)
                        // request.getSession().getAttribute(HttpContext.AUTHORIZATION);
                        // if (authorization == null) {
-                       Collection<ServiceReference<WebCmsSession>> sr;
+                       Collection<ServiceReference<CmsSession>> sr;
                        try {
-                               sr = bc.getServiceReferences(WebCmsSession.class,
-                                               "(" + WebCmsSession.CMS_SESSION_ID + "=" + httpSessionId + ")");
+                               sr = bc.getServiceReferences(CmsSession.class,
+                                               "(" + CmsSession.SESSION_LOCAL_ID + "=" + httpSessionId + ")");
                        } catch (InvalidSyntaxException e) {
                                throw new CmsException("Cannot get CMS session for id " + httpSessionId, e);
                        }
                        if (sr.size() == 1) {
-                               WebCmsSession cmsSession = bc.getService(sr.iterator().next());
+                               CmsSession cmsSession = bc.getService(sr.iterator().next());
                                authorization = cmsSession.getAuthorization();
                                if (log.isTraceEnabled())
                                        log.trace("Retrieved authorization from " + cmsSession);
@@ -97,57 +99,34 @@ public class HttpSessionLoginModule implements LoginModule {
                return true;
        }
 
-       // private Authorization checkHttp() {
-       // Authorization authorization = null;
-       // if (request != null) {
-       // authorization = (Authorization)
-       // request.getAttribute(HttpContext.AUTHORIZATION);
-       // if (authorization == null) {
-       // String httpSessionId = request.getSession().getId();
-       // authorization = (Authorization)
-       // request.getSession().getAttribute(HttpContext.AUTHORIZATION);
-       // if (authorization == null) {
-       // Collection<ServiceReference<WebCmsSession>> sr;
-       // try {
-       // sr = bc.getServiceReferences(WebCmsSession.class,
-       // "(" + WebCmsSession.CMS_SESSION_ID + "=" + httpSessionId + ")");
-       // } catch (InvalidSyntaxException e) {
-       // throw new CmsException("Cannot get CMS session for id " + httpSessionId,
-       // e);
-       // }
-       // if (sr.size() == 1) {
-       // WebCmsSession cmsSession = bc.getService(sr.iterator().next());
-       // authorization = cmsSession.getAuthorization();
-       // if (log.isTraceEnabled())
-       // log.trace("Retrieved authorization from " + cmsSession);
-       // } else if (sr.size() == 0)
-       // return null;
-       // else
-       // throw new CmsException(
-       // sr.size() + ">1 web sessions detected for http session " +
-       // httpSessionId);
-       // }
-       // }
-       // }
-       // return authorization;
-       // }
-
        @Override
        public boolean commit() throws LoginException {
-               // TODO create CmsSession in another module
-               Authorization authorizationToRegister;
-               if (authorization == null) {
-                       authorizationToRegister = (Authorization) sharedState.get(CmsAuthUtils.SHARED_STATE_AUTHORIZATION);
-               } else { // this login module did the authorization
-                       CmsAuthUtils.addAuthentication(subject, authorization);
-                       authorizationToRegister = authorization;
+               if(authorization!=null){
+                       CmsAuthUtils.addAuthorization(subject, authorization,request);
+//                     CmsAuthUtils.registerSessionAuthorization(bc, request, subject, authorization);
                }
-               if (authorizationToRegister == null) {
-                       return false;
+               
+               // TODO create CmsSession in another module
+//             Authorization authorizationToRegister;
+//             if (authorization == null) {
+//                     authorizationToRegister = (Authorization) sharedState.get(CmsAuthUtils.SHARED_STATE_AUTHORIZATION);
+//             }
+//             else { // this login module did the authorization
+//                     CmsAuthUtils.addAuthentication(subject, authorization);
+//                     authorizationToRegister = authorization;
+//             }
+//             if (authorizationToRegister == null) {
+//                     return false;
+//             }
+//             if (request == null)
+//                     return false;
+//             CmsAuthUtils.registerSessionAuthorization(bc, request, subject, authorizationToRegister);
+
+               byte[] outToken = (byte[]) sharedState.get(CmsAuthUtils.SHARED_STATE_SPNEGO_OUT_TOKEN);
+               if (outToken != null) {
+                       response.setHeader(CmsAuthUtils.HEADER_WWW_AUTHENTICATE,
+                                       "Negotiate " + java.util.Base64.getEncoder().encodeToString(outToken));
                }
-               if (request == null)
-                       return false;
-               CmsAuthUtils.registerSessionAuthorization(bc, request, subject, authorizationToRegister);
 
                if (authorization != null) {
                        // CmsAuthUtils.addAuthentication(subject, authorization);