Package org.glite.authz.pap.server

Source Code of org.glite.authz.pap.server.PAPService

/**
* Copyright (c) Members of the EGEE Collaboration. 2006-2009.
* See http://www.eu-egee.org/partners/ for details on the copyright holders.
*
* Licensed 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.glite.authz.pap.server;

import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.NoSuchElementException;
import java.util.TimeZone;

import javax.servlet.ServletContext;

import org.glite.authz.pap.authz.AuthorizationEngine;
import org.glite.authz.pap.common.PAPConfiguration;
import org.glite.authz.pap.common.Pap;
import org.glite.authz.pap.common.Version;
import org.glite.authz.pap.common.exceptions.PAPConfigurationException;
import org.glite.authz.pap.common.xacml.wizard.AttributeWizardTypeConfiguration;
import org.glite.authz.pap.distribution.DistributionModule;
import org.glite.authz.pap.monitoring.MonitoredProperties;
import org.glite.authz.pap.papmanagement.PapContainer;
import org.glite.authz.pap.papmanagement.PapManager;
import org.glite.authz.pap.repository.RepositoryManager;
import org.glite.authz.pap.repository.RepositoryUtils;
import org.glite.authz.pap.repository.exceptions.RepositoryException;
import org.joda.time.DateTime;
import org.joda.time.chrono.ISOChronology;
import org.opensaml.DefaultBootstrap;
import org.opensaml.xml.ConfigurationException;
import org.slf4j.Logger;

public final class PAPService {

  static final Logger logger = org.slf4j.LoggerFactory
      .getLogger(PAPService.class);

  protected static void setStartupMonitoringProperties() {

    // Property: service startup time
    Calendar c = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
    DateTime dt = new DateTime(c.getTimeInMillis())
        .withChronology(ISOChronology.getInstanceUTC());

    PAPConfiguration.instance().setMonitoringProperty(
        MonitoredProperties.SERVICE_STARTUP_TIME_MILLIS_PROP_NAME,
        c.getTimeInMillis());

    PAPConfiguration.instance().setMonitoringProperty(
        MonitoredProperties.SERVICE_STARTUP_TIME_PROP_NAME, dt);

    PapManager papManager = PapManager.getInstance();

    // Property: number of local policies
    int numberOfLocalPolicies = 0;
    for (PapContainer papContainer : PapContainer.getContainers(papManager
        .getLocalPaps())) {
      numberOfLocalPolicies += papContainer.getNumberOfPolicies();
    }
    PAPConfiguration.instance().setMonitoringProperty(
        MonitoredProperties.NUM_OF_LOCAL_POLICIES_PROP_NAME,
        numberOfLocalPolicies);

    // Property: number of remote policies
    int numOfRemotePolicies = 0;
    for (PapContainer papContainer : PapContainer.getContainers(papManager
        .getRemotePaps())) {
      numOfRemotePolicies += papContainer.getNumberOfPolicies();
    }
    PAPConfiguration.instance().setMonitoringProperty(
        MonitoredProperties.NUM_OF_REMOTE_POLICIES_PROP_NAME,
        numOfRemotePolicies);

    // Property: number of policies
    PAPConfiguration.instance().setMonitoringProperty(
        MonitoredProperties.NUM_OF_POLICIES_PROP_NAME,
        numberOfLocalPolicies + numOfRemotePolicies);

    // Property: policy last modification time
   
    String policyLastModificationTimeString = papManager.getPap(
        Pap.DEFAULT_PAP_ALIAS)
        .getPolicyLastModificationTimeInMilliseconds();
   
    DateTime policyLastModificationTime = new DateTime(Long.parseLong(policyLastModificationTimeString))
      .withChronology(ISOChronology.getInstanceUTC());

    PAPConfiguration
        .instance()
        .setMonitoringProperty(
            MonitoredProperties.POLICY_LAST_MODIFICATION_TIME_MILLIS_PROP_NAME,
            policyLastModificationTimeString);

    PAPConfiguration.instance().setMonitoringProperty(
        MonitoredProperties.POLICY_LAST_MODIFICATION_TIME_PROP_NAME,
        policyLastModificationTime);
  }

  public static void start(ServletContext context) {

    logger.info("Starting PAP service version {} ...",
        Version.getServiceVersion());

    // Initialize configuaration
    PAPConfiguration conf = PAPConfiguration.initialize(context);

    // Start autorization service
    logger.info("Starting authorization engine...");

    AuthorizationEngine.initialize(conf.getPapAuthzConfigurationFileName());

    // Bootstrap opensaml
    try {

      logger.info("Bootstraping OpenSAML...");
      DefaultBootstrap.bootstrap();

    } catch (ConfigurationException e) {

      logger.error("Error configuring OpenSAML:" + e.getMessage());
      throw new PAPConfigurationException("Error configuring OpenSAML:"
          + e.getMessage(), e);
    }

    // Boostrap wizard attributes
    String configFileName = PAPConfiguration.instance()
        .getPAPConfigurationDir() + "/attribute-mappings.ini";
    AttributeWizardTypeConfiguration.bootstrap(configFileName);

    // Start repository manager
    logger.info("Starting repository manager...");
    RepositoryManager.bootstrap();

    PapManager.initialize();

    boolean performRepositoryValidationCheck;

    try {

      performRepositoryValidationCheck = PAPConfiguration.instance()
          .getBoolean("repository.consistency_check");

    } catch (NoSuchElementException e) {

      performRepositoryValidationCheck = false;
      logger.info("Skipping repository validation check");

    }

    if (performRepositoryValidationCheck) {

      boolean repair;

      try {

        repair = PAPConfiguration.instance().getBoolean(
            "repository.consistency_check.repair");

      } catch (NoSuchElementException e) {

        repair = false;
      }

      logger.info("Starting repository validation. repair=" + repair);

      if (RepositoryUtils.performAllChecks(repair) == false) {

        throw new RepositoryException(
            "Repository validation check failed");

      }
    }

    setStartupMonitoringProperties();

    logger.info("Starting pap distribution module...");
    DistributionModule.getInstance().startDistributionModule();

  }

  public static void stop() {

    logger.info("Shutting down PAP service...");

    logger.info("Shutting down distribution module...");
    DistributionModule.getInstance().stopDistributionModule();

    logger.info("Shutting down authorization module...");
    if (AuthorizationEngine.instance() != null)
      AuthorizationEngine.instance().shutdown();
   
    logger.info("Disposing CANL validator...");
    if (PAPConfiguration.instance().getCertchainValidator() != null)
      PAPConfiguration.instance().getCertchainValidator().dispose();
   
    logger.info("PAP service stopped.");

  }

}
TOP

Related Classes of org.glite.authz.pap.server.PAPService

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.