Hello Cocooners,

while looking at the authentication-fw sample I tried to rewrite and
merge the sample.js and auth.js files to match my needs. I want to keep
the referring URL, so that after successful login the user is at the
place he wanted to be.
I would be glad if you'd have a look at my code or have some better ideas! 
(referringTarget means
the url the user wanted to get to, entryPointTarget if started with
plain old login page).

Regards,
Florian

##### sitemap snippet #####

      <map:match pattern="">
        <map:redirect-to uri="login" session="true"/>
      </map:match>

      <map:match pattern="login">
        <map:call function="isLoggedIn">
          <map:parameter name="handler" value="flowdemohandler"/>
          <map:parameter name="entryPointTarget" value="protected"/>
        </map:call>
      </map:match>

      <map:match pattern="do-login">
        <map:call function="login">
          <map:parameter name="handler" value="flowdemohandler"/>
          <map:parameter name="parameter_name" 
value="{request-param:username}"/>
          <map:parameter name="entryPointTarget" value="protected"/>
        </map:call>
      </map:match>

      <map:match pattern="protected">
        <map:call function="protect">
          <map:parameter name="handler" value="flowdemohandler"/>
          <map:parameter name="entryPointTarget" value="internal/protected"/>
        </map:call>
      </map:match>

      <map:match pattern="do-logout">
        <map:call function="logout">
          <map:parameter name="handler" value="flowdemohandler"/>
        </map:call>
      </map:match>
    </map:pipeline>


##### myLogin.js #####

function protect () {
        var referringTarget = cocoon.parameters["referringTarget"];
        var entryPointTarget = cocoon.parameters["entryPointTarget"];
        var authMgr = null;
        try {
                authMgr = 
cocoon.getComponent(Packages.org.apache.cocoon.webapps.authentication.AuthenticationManager.ROLE);
                if ( 
authMgr.checkAuthentication(null,cocoon.parameters["handler"],"") ) {
                        if ( referringTarget != null ) {
                                cocoon.sendPage(referringTarget);
                        }
                        else {
                                if ( entryPointTarget != null ) {
                                        cocoon.sendPage(entryPointTarget);
                                }
                                else {
                                        throw new Error("No target given");
                                }
                        }
                }
                else {
                        /** depends on DefaultAuthenticationManager ! */
                        cocoon.redirectTo(authMgr.getForwardingURI(handler));
                }
        }
        finally {
                if ( authMgr != null ) {
                        cocoon.releaseComponent(authMgr);
                }
        }
}

function isLoggedIn () {
        var referringTarget = cocoon.parameters["referringTarget"];
        var entryPointTarget = cocoon.parameters["entryPointTarget"];
        var authMgr = null;
        try {
                authMgr = 
cocoon.getComponent(Packages.org.apache.cocoon.webapps.authentication.AuthenticationManager.ROLE);
                if ( authMgr.isAuthenticated(cocoon.parameters["handler"]) != 
null ) {
                        if ( referringTarget != null ) {
                                cocoon.sendPage(referringTarget);
                        }
                        else {
                                if ( entryPointTarget != null ) {
                                        cocoon.sendPage(entryPointTarget);
                                }
                                else {
                                        throw new Error("No target given");
                                }
                        }
                }
                else {
                        /** depends on DefaultAuthenticationManager ! */
                        
cocoon.redirectTo(authMgr.getForwardingURI(cocoon.parameters["handler"]));
                }
        }
        finally {
                if ( authMgr != null ) {
                        cocoon.releaseComponent(authMgr);
                }
        }
}

function login () {
        var referringTarget = cocoon.parameters["referringTarget"];
        var entryPointTarget = cocoon.parameters["entryPointTarget"];
        var authMgr = null;
        try {
                authMgr = 
cocoon.getComponent(Packages.org.apache.cocoon.webapps.authentication.AuthenticationManager.ROLE);
                if ( authMgr.isAuthenticated(cocoon.parameters["handler"]) != 
null ) {
                        if ( referringTarget != null ) {
                                cocoon.sendPage(referringTarget);
                        }
                        else {
                                if ( entryPointTarget != null ) {
                                        cocoon.sendPage(entryPointTarget);
                                }
                                else {
                                        throw new Error("No target given");
                                }
                        }
                }
                else {
                        var authParams = new 
Packages.org.apache.excalibur.source.SourceParameters();
                        for (var name in params) {
                                if ( name.startsWith("parameter_") ) {
                                        
authParams.setParameter(name.substring(10),params[name]);
                                }
                        }
                        if ( authMgr.login(handler,"",authParams) != null ) {
                                if ( referringTarget != null ) {
                                        cocoon.sendPage(referringTarget);
                                }
                                else {
                                        if ( entryPointTarget != null ) {
                                                
cocoon.sendPage(entryPointTarget);
                                        }
                                        else {
                                                throw new Error("No target 
given");
                                        }
                                }
                        }
                }
        }
        finally {
                if ( authMgr != null ) {
                        cocoon.releaseComponent(authMgr);
                }
        }
}

function logout () {
        var authMgr;
        try {
                authMgr = 
cocoon.getComponent(Packages.org.apache.cocoon.webapps.authentication.AuthenticationManager.ROLE);
                var state = authMgr.getState();
                var handler = cocoon.parameters["handler"];
                if ( handler == null ) {
                        if ( state != null ) {
                                handler = state.getHandlerName();
                        }
                        else {
                                throw new Error("LogoutAction requires at least 
the handler parameter.");
                        }
                }
                
authMgr.logout(handler,Packages.org.apache.cocoon.webapps.authentication.AuthenticationConstants.LOGOUT_MODE_IMMEDIATELY);
                cocoon.redirectTo(authMgr.getForwardingURI(handler));
        }
        finally {
                cocoon.releaseComponent(authMgr);
        }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to