/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


#ifndef __com_sun_star_task_PasswordContainer_idl__ 
#define __com_sun_star_task_PasswordContainer_idl__ 

module com {  module sun {  module star {  
	module task {
        published interface XPasswordContainer;
        published interface XMasterPasswordHandling;
    };
}; }; };
 
module com {  module sun {  module star {  module task {  
//============================================================================
/** this service is kind of storage that allows to store passwords 
	and to retrieve already stored.

	<p>
	A password can be stored for the session period or persistently. 
	The persistent way is only possible if configuration allows to use storage. 
	It stores passwords encripted with a super password. An interaction
	is used to ask a user for a super password.
	To allow such an interaction, an object that implements <type>XInteractionHandler</type> 
	interface should be provided. For this purpose <type>InteractionHandler</type> 
	service can be used.
	</p>

	<p>
	In case no interaction handler is provided all passwords are stored
	for the session period. In case an interaction handler is provided, but
	the super password interaction does not return super password ( for any reason ), 
	<type>NoMasterException</type> exception is thrown to let user use
	nonpersistent way explicitly.
	</p>
*/
published service PasswordContainer
{
    //------------------------------------------------------------------------
    /** handles passwords
	
		<p>
		Use this interface to store\retrieve passwords.
		</p>
     */
	interface com::sun::star::task::XPasswordContainer;

    //------------------------------------------------------------------------
    /** handles passwords
	
		<p>
		Use this interface to store\retrieve passwords.
		</p>
     */
    [optional] interface com::sun::star::task::XMasterPasswordHandling;
};
 
}; }; }; };  
#endif 
