Package org.apache.isis.extensions.html.servlet.internal

Source Code of org.apache.isis.extensions.html.servlet.internal.SessionAccess

/*
*  Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you under the Apache License, Version 2.0 (the
*  "License"); you may not use this file except in compliance
*  with the License.  You may obtain a copy of the License at
*
*        http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing,
*  software distributed under the License is distributed on an
*  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
*  KIND, either express or implied.  See the License for the
*  specific language governing permissions and limitations
*  under the License.
*/


package org.apache.isis.extensions.html.servlet.internal;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.apache.isis.applib.fixtures.LogonFixture;
import org.apache.isis.metamodel.authentication.AuthenticationSession;
import org.apache.isis.runtime.authentication.AuthenticationManager;
import org.apache.isis.runtime.authentication.PasswordAuthenticationRequest;
import org.apache.isis.runtime.authentication.standard.ExplorationSession;
import org.apache.isis.runtime.authentication.standard.SimpleSession;
import org.apache.isis.runtime.context.IsisContext;
import org.apache.isis.runtime.system.DeploymentType;


public class SessionAccess {

    private static final Logger LOG = Logger.getLogger(SessionAccess.class);
    private static SessionAccess instance;

    // //////////////////////////////////////////////
    // Singleton factory
    // //////////////////////////////////////////////

    /**
     * Create singleton
     */
    public static void createInstance(final AuthenticationManager authenticationManager) {
        new SessionAccess(authenticationManager);
    }

    /**
     * Create singleton
     */
    public static void createInstance(
            final AuthenticationManager authenticationManager,
            final DeploymentType deploymentType,
            final LogonFixture logonFixture) {
        new SessionAccess(authenticationManager, deploymentType, logonFixture);
    }

    // //////////////////////////////////////////////
    // Sessions
    // //////////////////////////////////////////////

    // REVIEW part of decoupling systemaccess from servlet code - moved list sessions to monitorservlet
    public static List<Object> getSessions() {
        return instance.sessions;
    }

    // REVIEW part of decoupling systemaccess from servlet code - changed session to object
    public static void addSession(final Object session) {
        instance.sessions.add(session);
        if (LOG.isDebugEnabled()) {
            LOG.debug("session started " + session);
        }
    }

    // REVIEW part of decoupling systemaccess from servlet code - moved logoff part to sessionlist
    public static void removeSession(final Object session) {
        if (LOG.isDebugEnabled()) {
            LOG.debug("session ended " + session);
        }
        instance.sessions.remove(session);
    }

    // //////////////////////////////////////////////
    // Authentication, logoff
    // //////////////////////////////////////////////

    public static AuthenticationSession authenticate(final PasswordAuthenticationRequest passwordAuthenticationRequest) {
        return instance.authenticateInstance(passwordAuthenticationRequest);
    }

    public static void logoffUser(final AuthenticationSession session) {
        getAuthenticationManager().closeSession(session);
    }

    private static AuthenticationManager getAuthenticationManager() {
        if (instance == null) {
            throw new IllegalStateException("Server initialisation failed, or not defined as a context listener");
        }
        return instance.authenticationManager;
    }

    // //////////////////////////////////////////////
    // Request
    // //////////////////////////////////////////////

    public static void startRequest(final AuthenticationSession authSession) {
        IsisContext.openSession(authSession);
    }

    public static void endRequest(final AuthenticationSession authSession) {
      // if a Logout has occurred then there won't be any session
      // (though should the AuthenticationManagerStandard actually be closing the session? not sure)
     
      if (IsisContext.inSession()) {
        IsisContext.closeSession();
      }
    }

    // //////////////////////////////////////////////
    // Settings
    // //////////////////////////////////////////////

    public static boolean inExplorationMode() {
        return instance.inExplorationModeInstance();
    }

    // ///////////////////////////////////////////////////////////////////////////

    private final List<Object> sessions = new ArrayList<Object>();

    private final AuthenticationManager authenticationManager;
    private DeploymentType deploymentType;
    private LogonFixture logonFixture;

    private SessionAccess(final AuthenticationManager authenticationManager) {
        this(authenticationManager, DeploymentType.STANDALONE, null);
    }

    private SessionAccess(
            final AuthenticationManager authenticationManager,
            final DeploymentType deploymentType,
            final LogonFixture logonFixture) {
        this.authenticationManager = authenticationManager;

        this.deploymentType = deploymentType;
        this.logonFixture = logonFixture;

        SessionAccess.instance = this;
    }

    public DeploymentType getDeploymentType() {
        return deploymentType;
    }

    public LogonFixture getLogonFixture() {
        return logonFixture;
    }

    private AuthenticationSession authenticateInstance(PasswordAuthenticationRequest passwordAuthenticationRequest) {

        if ((deploymentType.isExploring() || deploymentType.isPrototyping()) &&
             logonFixture != null) {
            return new SimpleSession(logonFixture.getUsername(), logonFixture.getRoles());
        }

        if (deploymentType.isExploring()) {
            return new ExplorationSession();
        }

        return authenticationManager.authenticate(passwordAuthenticationRequest);
    }

    private boolean inExplorationModeInstance() {
        return deploymentType.isExploring();
    }

}
TOP

Related Classes of org.apache.isis.extensions.html.servlet.internal.SessionAccess

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.