/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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.pentaho.di.repository;
import java.util.List;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleSecurityException;
/**
* This is the interface to the security provider for the repositories out there.
* <p>
*
* This allows the repository to transparently implement any kind of authentication supported by Kettle.
*
* @author matt
*
*/
public interface RepositorySecurityProvider extends IRepositoryService {
/**
* @return the user information set on the security provider
*/
public IUser getUserInfo();
/**
* Validates the supplied operation.
*
* @throws KettleSecurityException
* in case the provided user is not know or the password is incorrect
* @throws KettleException
* in case the action couldn't be validated because of an unexpected problem.
*/
public void validateAction( RepositoryOperation... operations ) throws KettleException, KettleSecurityException;
/**
* @return true if the repository or the user is read only
*/
public boolean isReadOnly();
/**
* @return true if this repository supports file locking and if the user is allowed to lock a file
*/
public boolean isLockingPossible();
/**
* @return true if the repository supports revisions AND if it is possible to give version comments
*/
public boolean allowsVersionComments( String fullPath );
/**
* @return true if version comments are mandatory if allowed.
*/
public boolean isVersionCommentMandatory();
/**
* Retrieves all users in the system
*
* @return list of username
* @throws KettleSecurityException
* in case anything went wrong
*/
public List<String> getAllUsers() throws KettleException;
/**
* Retrieves all roles in the system
*
* @return list of role
* @throws KettleSecurityException
* in case anything went wrong
*/
public List<String> getAllRoles() throws KettleException;
public String[] getUserLogins() throws KettleException;
/**
* Determines whether versioning should be enabled in the UI for the given fully qualified file/path.
* If set to false, the repository may still support versioning, but the versioning will not be
* apparent in the UI.
* @return true if version are enabled, false if they if are not
*/
public boolean isVersioningEnabled( String fullPath );
}