/** * Copyright (c) Istituto Nazionale di Fisica Nucleare (INFN). 2006-2016 * * 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.security.voms.admin.core.validation; import org.glite.security.voms.admin.configuration.VOMSConfigurationConstants; import org.glite.security.voms.admin.core.tasks.VOMSExecutorService; import org.glite.security.voms.admin.core.validation.strategies.RequestValidationStrategy; import org.glite.security.voms.admin.core.validation.strategies.RestoreUserStrategy; import org.glite.security.voms.admin.core.validation.strategies.SuspendUserStrategy; import org.glite.security.voms.admin.core.validation.strategies.impl.DefaultMembershipCheckBehaviour; import org.glite.security.voms.admin.core.validation.strategies.impl.DefaultRequestValidationBehaviour; import org.glite.security.voms.admin.core.validation.strategies.impl.DefaultUserSuspensionManagementBehaviour; import org.glite.security.voms.admin.persistence.model.VOMSUser; import org.glite.security.voms.admin.persistence.model.VOMSUser.SuspensionReason; import org.glite.security.voms.admin.persistence.model.request.NewVOMembershipRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ValidationManager implements SuspendUserStrategy, RestoreUserStrategy, RequestValidationStrategy<NewVOMembershipRequest> { public static Logger log = LoggerFactory.getLogger(ValidationManager.class); private static volatile ValidationManager INSTANCE = null; protected RequestValidationContext requestValidationContext; protected MembershipValidationContext membershipValidationContext; protected UserSuspensionManagementContext userSuspensionManagementContext; private ValidationManager() { membershipValidationContext = new DefaultMembershipCheckBehaviour(); requestValidationContext = new DefaultRequestValidationBehaviour(); userSuspensionManagementContext = new DefaultUserSuspensionManagementBehaviour(); } public synchronized static ValidationManager instance() { if (INSTANCE == null) INSTANCE = new ValidationManager(); return INSTANCE; } public void startMembershipChecker() { log.debug("Starting membership checker task."); MembershipCheckerTask checker = new MembershipCheckerTask( membershipValidationContext); VOMSExecutorService.instance().startBackgroundTask(checker, VOMSConfigurationConstants.MEMBERSHIP_CHECK_PERIOD, 300L); log.debug("Membership validation context: {}", membershipValidationContext); log.debug("Request validation context: {}", requestValidationContext); log.debug("User suspension management context: {}", userSuspensionManagementContext); } /** * @return the requestValidationContext */ public RequestValidationContext getRequestValidationContext() { return requestValidationContext; } /** * @param requestValidationContext * the requestValidationContext to set */ public void setRequestValidationContext( RequestValidationContext requestValidationContext) { this.requestValidationContext = requestValidationContext; } /** * @return the membershipValidationContext */ public MembershipValidationContext getMembershipValidationContext() { return membershipValidationContext; } /** * @param membershipValidationContext * the membershipValidationContext to set */ public void setMembershipValidationContext( MembershipValidationContext membershipValidationContext) { this.membershipValidationContext = membershipValidationContext; } /** * @return the userSuspensionManagementContext */ public UserSuspensionManagementContext getUserSuspensionManagementContext() { return userSuspensionManagementContext; } /** * @param userSuspensionManagementContext * the userSuspensionManagementContext to set */ public void setUserSuspensionManagementContext( UserSuspensionManagementContext userSuspensionManagementContext) { this.userSuspensionManagementContext = userSuspensionManagementContext; } public void suspendUser(VOMSUser user, SuspensionReason suspensionReason) { getUserSuspensionManagementContext().getSuspendUserStrategy().suspendUser( user, suspensionReason); } public void restoreUser(VOMSUser user) { getUserSuspensionManagementContext().getRestoreUserStrategy().restoreUser( user); } public RequestValidationResult validateRequest(NewVOMembershipRequest r) { return getRequestValidationContext() .getVOMembershipRequestValidationStrategy().validateRequest(r); } }