serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmgrscriptsession.h
changeset 57 61b27eec6533
parent 45 7aa6007702af
--- a/serviceapifw_plat/rtsecuritymanager_client_api/inc/rtsecmgrscriptsession.h	Fri Apr 16 15:54:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,661 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:       Client side proxy class representing script session
- *
-*/
-
-
-
-
-
-
-
-#ifndef _CRTSECMGRSCRIPTSESSION_H_
-#define	_CRTSECMGRSCRIPTSESSION_H_
-
-#include <rtsecmanager.rsg>
-#include <rtsecmgrcommondef.h>
-#include <rtsecmgrpermission.h>
-#include <rtsecmgrscript.h>
-#include <rtsecmgrtrustinfo.h>
-
-class CCoeEnv;
-class CRTSecMgrSubSessionProxy;
-
-/**
- * Type holding data to be used while prompting. 
- * 
- * The default or custom (runtime over-ridden) prompt handler requires the permission
- * type to prompt and the user-selection to be returned to security 
- * manager for access permission check
- * 
- * @lib rtsecmgrclient.lib
- */
-class CPromptData : public CBase
-	{
-public:
-
-	/**
-	 * Two-phased constructor
-	 * 
-	 * Constructs a CPromptData instance
-	 *
-	 * @return pointer to an instance of CPromptData
-	 */
-	static CPromptData* NewL()
-		{
-		CPromptData* self = CPromptData::NewLC ();
-		CleanupStack::Pop (self);
-		return self;
-		}
-
-	/**
-	 * Two-phased constructor
-	 * 
-	 * Constructs a CPromptData instance and leaves the created instance
-	 * onto the cleanupstack.
-	 *
-	 * @return pointer to an instance of CPromptData
-	 */
-	
-	static CPromptData* NewLC()
-		{
-		CPromptData* self = new (ELeave) CPromptData();
-		CleanupStack::PushL (self);
-		self->ConstructL ();
-		return self;
-		}
-		
-
-	/**
-	 * Destructor
-	 * 
-	 */
-	~CPromptData()
-		{
-		if(iPermission)
-			delete iPermission;
-		
-		}
-
-	
-	/*
-	 *
-	 *
-	 */
-	void ConstructL()
-	{
-		
-	}
-	
-	/**
-	 * Returns permission data
-	 * 
-	 * @return an object containing the permission data
-	 */
-	inline CPermission* Permission() const
-		{
-		return iPermission;
-		}
-
-	/**
-	 * Sets the user-selection data
-	 * 
-	 * @param aUserSelection TUserPromptOption user-selected data value
-	 */
-	inline void SetUserSelection(TUserPromptOption aUserSelection)
-		{
-		iUserSelection = aUserSelection;
-		}
-		
-	/**
-	 * Sets the permission value of the domain
-	 * 
-	 * @param aPermission CPermission permission value of the domain
-	 */
-	 
-	inline void SetPermissions(CPermission& aPermission)
-		{	
-		 if(iPermission)
-		 {
-		 	delete iPermission;
-		 	iPermission = NULL;
-		 }
-		 
-		 iPermission = CPermission::NewL(aPermission);
- 		//iPermission = &aPermission;
-		}
-private:
-	//private default constructor
-	CPromptData::CPromptData() :
-		iUserSelection(RTUserPrompt_UnDefined)
-		{
-		}
-
-	//private permission data
-	CPermission* iPermission;
-
-	//private user-selection
-	TUserPromptOption iUserSelection;
-
-	friend class CRTSecMgrScriptSession;
-	};
-
-//typdef to model list of prompt data structure
-typedef RPointerArray<CPromptData> RPromptDataList;
-typedef RArray<TInt> RResourceArray; 
-
-/* 
- * Prompt callback handler class. 
- * 
- * Runtimes should implement the prompt handler function to prompt the user 
- * and to obtain the user option chosen. The prompt data are used by
- * runtime security manager for further access permission check. 
- * 
- * If runtimes do not override prompt handling, security manager component 
- * would then provide default prompt handler functionality.
- *
- * @lib rtsecmgrclient.lib
- */
-class MSecMgrPromptHandler
-	{
-public:
-	/**
-	 * Prompts the user.
-	 * 
-	 * @param aPromptDataList RPromptDataList list of prompt data used by
-	 * prompt callback handler to show to the user
-	 * 
-	 * @return KErrNone if prompting successful; In case of failure, one of
-	 * system wide error codes
-	 */
-	virtual TInt Prompt(RPromptDataList& aPromptDataList , TExecutableID aExecID  = KAnonymousScript) =0;
-
-	/**
-	 * Sets the user chosen prompt selection.
-	 * 
-	 * @param aPromptUiOption TSecMgrPromptUIOption prompt selection
-	 */
-	virtual void SetPromptOption(TSecMgrPromptUIOption aPromptUiOption) =0;
-	/**
-	 * Returns the prompt selection
-	 * 
-	 * @return TSecMgrPromptUIOption the prompt selection
-	 */
-	virtual TSecMgrPromptUIOption PromptOption() const =0;
-	};
-
-struct TPermanentInfo
-    {
-    TPermGrant iAllowedBits;            //permanent allowed caps
-    TPermGrant iDeniedBits;             //permanent denied caps
-    RProviderArray iAllowedProviders;   //permanent allowed providers
-    RProviderArray iDeniedProviders;    //permanent denied providers
-    };
-
-struct TSessionInfo
-    {
-    TCapabilityBitSet AllowedCaps; //caps allowed for this session (caps allowed for this session & perm allowed)
-    TCapabilityBitSet DeniedCaps; //caps denied for this sesion (caps denied for this session & perm denied)
-    RProviderArray AllowedProviders;//providers allowed for this session
-    RProviderArray DeniedProviders;//providers denied for this session
-    };
-
-/**
- *
- * Thin proxy to the client side sub-session handle. 
- * 
- * This class implements the default prompt handling functionality. In addition, the main
- * functionality of native platform access check is performed by CRTSecMgrScriptSession.
- *
- * @lib rtsecmgrclient.lib
- * 
- */
-NONSHARABLE_CLASS(CRTSecMgrScriptSession) : public CBase, MSecMgrPromptHandler
-	{
-public:
-	/**
-	 * Two-phased constructor
-	 * 
-	 * Constructs a CRTSecMgrScriptSession instance
-	 *
-	 * Initializes client side script sub-session. 
-	 * 
-	 * @param MSecMgrPromptHandler pointer to a prompt handler callback
-	 * 
-	 * @return pointer to an instance of CRTSecMgrScriptSession if succesful; 
-	 * Otherwise NULL
-	 */
-	static CRTSecMgrScriptSession* NewL(MSecMgrPromptHandler* aPromptHdlr=0);
-
-	/**
-	 * Two-phased constructor
-	 * 
-	 * Constructs a CRTSecMgrScriptSession instance and leaves the created instance
-	 * on the cleanupstack
-	 *
-	 * Initializes client side script sub-session. 
-	 * 
-	 * @param MSecMgrPromptHandler pointer to a prompt handler callback
-	 * 
-	 * @return pointer to an instance of CRTSecMgrScriptSession if succesful; 
-	 * Otherwise NULL
-	 */
-	static CRTSecMgrScriptSession* NewLC(MSecMgrPromptHandler* aPromptHdlr=0);
-	
-	/**
-	 * Callback funciton for moreinfo link in advanced prompt
-	 * 
-	 * Calls the moreinfo function for indivudual capability or for a alias group
-	 * 
-	 * @param aCallbackParam TAny* pointer to TCallbackParam
-	 * 
-	 */
-  static TInt LinkCallback(TAny *aCallbackParam);
-
-	/**
-	 * Destructor
-	 * 
-	 * Closes the sub-session
-	 *
-	 */
-	IMPORT_C ~CRTSecMgrScriptSession();
-
-	/**
-	 * Opens security manager script sub-session. This method in turn opens a
-	 * sub-session on the server side, by bringing script related data onto the cache. 
-	 * 
-	 * @param aParentSession RSessionBase handle to parent security manager session
-	 * @param aPolicyID TPolicyID policy identifier of the script associated with this script session
-	 * @param aExecID TExecutableID identifier of the script associated with this script session
-	 * 
-	 * @return KErrNone if successful; In case of failure, one of system wide error cods
-	 */
-	TInt Open(const RSessionBase& aParentSession,TPolicyID aPolicyID,TExecutableID aExecID);
-
-	/**
-	 * Opens security manager script sub-session. This method in turn opens a
-	 * sub-session on the server side, by bringing script related data onto the cache. 
-	 * 
-	 * @param aParentSession RSessionBase handle to parent security manager session
-	 * @param aPolicyID TPolicyID policy identifier of the script associated with this script session
-	 * @param aExecID TExecutableID identifier of the script associated with this script session
-	 * @param aHashValue TDesC		hash value of the scrpt passed while registering the script
-	 * 
-	 * @return KErrNone if successful; In case of failure, one of system wide error cods
-	 */
-	TInt Open(const RSessionBase& aParentSession,TPolicyID aPolicyID,TExecutableID aExecID,const TDesC& aHashValue);
-
-	/**
-	 * Opens security manager script sub-session. This method in turn opens a
-	 * sub-session on the server side, by bringing script related data onto the cache. 
-	 * 
-	 * @param aParentSession RSessionBase handle to parent security manager session
-	 * @param aPolicyID TPolicyID policy identifier of the script associated with this script session
-	 * @param aExecID TExecutableID identifier of the script associated with this script session
-	 * @param aTrustInfo CTrustInfo trust data structure
-	 * 
-	 * @return KErrNone if successful; In case of failure, one of system wide error cods
-	 */
-	TInt Open(const RSessionBase& aParentSession,TPolicyID aPolicyID,TExecutableID aExecID,const CTrustInfo& aTrustInfo);
-
-	/**
-	 * Performs access permission check
-	 * 
-	 * This method evaluates access permission by comparing the expected capabilities
-	 * to perform service invocation with the capabilities of the script. The
-	 * capabilities of the script is computed as sum of :
-	 * 	
-	 * 	-	default allowed capabilities as specified in security access policy
-	 * 	-	user-granted capabilities, allowed by user while prompting
-	 *
-	 * The capabilities allowed by the user could be of various durations, like
-	 * session-based, blanket/permanent and the one valid for the current invocation only 
-	 * (one-shot)
-	 * 
-	 * @param aCapabilitiesToCheck RCapabilityArray list of capabilities to be checked against
-	 * script's capbilities
-	 * 
-	 * @return EAccessOk if the access permission check is successful; Else, EAccessNOk
-	 */
-	IMPORT_C TInt IsAllowed(const RCapabilityArray& aCapabilitiesToCheck);
-
-	/**
-	 * Performs access permission check
-	 * 
-	 * This overloaded method evaluates access permission by comparing the expected capabilities
-	 * to perform service invocation with the capabilities of the script. The
-	 * capabilities of the script is computed as sum of :
-	 * 	
-	 * 	-	default allowed capabilities as specified in security access policy
-	 * 	-	user-granted capabilities, allowed by user while prompting
-	 *
-	 * The capabilities allowed by the user could be of various durations, like
-	 * session-based, blanket/permanent and the one valid for the current invocation only 
-	 * (one-shot)
-	 * 
-	 * This overloaded version returns the list of capabilities that do not match after
-	 * access permission check. This can be used by the client to display to the user the
-	 * list of unmatched capabilities
-	 * 
-	 * @param aCapabilitiesToCheck RCapabilityArray list of capabilities to be checked against
-	 * script's capbilities
-	 * @param aUnMatchedCapabilities RCapabilityArray list of unmatched capabilities
-	 * 
-	 * @return EAccessOk if the access permission check is successful; Else, EAccessNOk
-	 */
-	IMPORT_C TInt IsAllowed(const RCapabilityArray& aCapabilitiesToCheck,RCapabilityArray& aUnMatchedCapabilities);
-
-	/**
-     * Performs access permission check
-     * 
-     * This overloaded method evaluates access permission by comparing the expected capabilities
-     * to perform service invocation with the capabilities of the script. The
-     * capabilities of the script is computed as sum of :
-     *  
-     *  -   default allowed capabilities as specified in security access policy
-     *  -   user-granted capabilities, allowed by user while prompting
-     *
-     * The capabilities allowed by the user could be of various durations, like
-     * session-based, blanket/permanent and the one valid for the current invocation only 
-     * (one-shot)
-     * 
-     * This overloaded version returns the list of capabilities that do not match after
-     * access permission check. This can be used by the client to display to the user the
-     * list of unmatched capabilities
-     * 
-     * @param aCapabilitiesToCheck RCapabilityArray list of capabilities to be checked against
-     * script's capbilities
-     * @param aProviderUid TProviderUid The provider that is being loaded
-     * @param aResourceFilePath TFileName resource file containing the string to prompt.
-     * 
-     * @return EAccessOk if the access permission check is successful; Else, EAccessNOk
-     */
-	IMPORT_C TInt IsAllowed(const RCapabilityArray& aCapabilitiesToCheck, TProviderUid aProviderUid, TFileName aResourceFileName);
-	
-	/**
-     * Definition of default prompt handler.
-     * 
-     * @param aPromptDataList RPromptDataList list of prompt data used by
-     * prompt callback handler to show to the user
-     * 
-     * @return KErrNone if prompting successful; In case of failure, one of
-     * system wide error codes
-     *
-     */
-	TInt Prompt(RPromptDataList& aPromptDataList , TExecutableID aExecID = KAnonymousScript);
-    
-    /**
-	 * Definition of cost notification.
-	 * 
-	 */
-    void PromptCostL() ; 
-    
-	/**
-	 * Gets the underlying script object
-	 * 
-	 * This method is to be used by components, such as application manager,
-	 * that are interested in displaying script related information to the user.
-	 * 
-	 * Following are the script related information:
-	 * 
-	 * 	- Capabilities allowed by default
-	 * 	- User-grantable capabilities
-	 * 	- Currently allowed or denied blanket permissions
-	 *
-	 * Note that this method should not be used by runtimes unless and until there is
-	 * a strong design justification
-	 * 
-	 * @return a reference to underlying script object
-	 */
-	inline CScript& CRTSecMgrScriptSession::Script()
-		{
-		return *iScript;
-		}
-
-	/**
-	 * Returns prompt handler reference
-	 * 
-	 * @return reference to prompt handler
-	 */
-	inline MSecMgrPromptHandler* PromptHandler() const
-		{
-		return iPromptHdlr;
-		}
-
-	/**
-	 * Sets prompt UI option. The supported prompt options are :
-	 * 
-	 * 	-	Basic/Default
-	 * 	- 	Advanced
-	 * 
-	 * The difference between the basic and advanced prompt option
-	 * reisdes in the fact the number of prompt options and the corresponding
-	 * prompt texts displayed would be different.
-	 * 
-	 * If not explictly, the default prompt UI option is set to basic/default prompt UI.
-	 * 
-	 * @param aUIPromptOption TSecMgrPromptUIOption basic/advanced prompt UI option
-	 */
-	inline void SetPromptOption(TSecMgrPromptUIOption aUIPromptOption)
-		{
-		iUIPromptOption = aUIPromptOption;
-		}
-
-	/**
-	 * Gets prompt UI option. The supported prompt options are :
-	 * 
-	 * 	-	Basic/Default
-	 * 	- 	Advanced
-	 * 
-	 * The difference between the basic and advanced prompt option
-	 * reisdes in the fact the number of prompt options and the corresponding
-	 * prompt texts displayed would be different.
-	 * 
-	 * @return aUIPromptOption TSecMgrPromptUIOption basic/advanced prompt UI option
-	 */
-	inline TSecMgrPromptUIOption PromptOption() const
-		{
-		return iUIPromptOption;
-		}
-	
-	/**
-	 * Sets the application name to the value passed by the runtime.
-	 * The name is displayed as part of the prompt for provider based prompting.
-	 * If name is not set then the default name is used.
-	 * 
-	 * @param aName TDesC& name of the application.
-	 */
-	IMPORT_C void SetApplicationNameL(const TDesC& aName);
-	    
-
-private:
-	/*
-	 * Default private constructor
-	 * 
-	 */
-	CRTSecMgrScriptSession(MSecMgrPromptHandler* aPromptHdlr=0);
-
-	/*
-	 * Two phased constructor
-	 * 
-	 */
-	void ConstructL();
-
-	/*
-	 * Contains prompt logic
-	 * 
-	 */
-	TInt Prompt(CPromptData* aPromptData);
-	
-	/*
-	 * Private default implementation for advanced prompt UI option
-	 * 
-	 */
-	TInt PromptAdvanced(CPromptData* aPromptData);
-
-	/* 
-	 * Logic for displaying more inormation when the user selects more info
-	 * 
-	 */
-	TInt MoreInfoL(CPromptData& aPromptData);
-	
-	/*
-	 * Logic identifying the user-selection of prompt
-	 * duration
-	 * 
-	 */
-	void HandleGrantChosen(CPromptData* aPromptData,
-		TCapabilityBitSet aCapBitSet, TCapabilityBitSet& aAllowedCaps,
-		TBool& aIsPermGrantModified);
-
-	/*
-	 * Private implementation to update blanket permission data
-	 * 
-	 */
-	void UpdatePermGrant();
-	
-	/*
-	 * Conversion utility to convert a single 32-bit value to the list of
-	 * capabilities (RArray<TCapability>)
-	 * 
-	 */
-	void BuildCapsL(TCapabilityBitSet aCapBitSet, RCapabilityArray& aInOutTCapList);
-
-	/*
-	 * Private implementation to evaluate access permission check
-	 * 
-	 */
-	TInt IsAllowed(const RCapabilityArray& aCapsToCheck,RPromptDataList& aPromptDataList,TCapabilityBitSet& aUnMatchedCapBits);
-
-	/*
-	 * Private implementation to evaluate access permission check. This
-	 * overloaded version additionally returns the unmatched capabilities
-	 * 
-	 */
-	TInt IsAllowed(const RCapabilityArray& aCapsToCheck,TCapabilityBitSet& aUnMatchedCapBits);
-
-	/*
-	 * Conversion utility to generate an unsigned 32-bit value toggling the individual bits
-	 * to the corresponding TCapability value
-	 * 
-	 */
-	void AddCapability(TCapabilityBitSet& aInOutCapBitSet, TCapability aCapToSet);
-
-	/*
-	 * Attempts to close the script sub-session
-	 * 
-	 */
-	void Close();
-	
-	/*
-	 * Function to add the security manager resource file to the CONE environment
-	 */
-	void AddResourceFiles();
-	
-	/*
-	 * Function to add the provider's resource file from which the body of the prompt is populated.
-	 * 
-	 * @param aResourceFileName TFileName The resource file to be added to the CONE environment
-	 */
-	TInt AddProviderResourceFile(TFileName aResourceFileName);
-	
-	/*
-	 * Close all the resource files added to the CONE environment
-	 */
-	void CloseResourceFiles();
-
-private:
-	/*
-	 * permissions allowed or denied for the current session
-	 * The lifetime of this data structure is associated
-	 * with this script session
-	 * 
-	 */
-	struct
-		{
-		TSessionInfo* sessionInfo; //Information about what is allowed for this session (caps/providers allowed for this session & perm allowed)
-		TCapabilityBitSet DeniedCaps; //Information about what is denied for this session (caps/providers denied for this session & perm denied)
-		}_sessionData;
-
-	/*
-	 * anonymous enumerations for selection index
-	 * 
-	 */
-	enum
-		{
-		PROMPT_SELIDX_ZERO = 0,
-		PROMPT_SELIDX_ONE = PROMPT_SELIDX_ZERO + 1,
-		PROMPT_SELIDX_TWO = PROMPT_SELIDX_ZERO + 2,
-		PROMPT_SELIDX_THREE = PROMPT_SELIDX_ZERO + 3,
-		PROMPT_SELIDX_FOUR = PROMPT_SELIDX_ZERO + 4,
-		PROMPT_SELIDX_FIVE = PROMPT_SELIDX_ZERO + 5
-		};
-
-	/*
-	 * private script reference
-	 * 
-	 */
-	CScript* iScript;
-
-	/*
-	 * permanently allowed capability bits
-	 * 
-	 */
-	TPermanentInfo* _permanentInfo; //perm allowed information, persistently stored for this script
-
-	/*
-	 * Generic data about the script session
-	 * 
-	 */
-	HBufC* iSessionData; 
-	
-	/*
-	 * reference to prompt handler instance
-	 * 
-	 */
-	MSecMgrPromptHandler* iPromptHdlr;
-
-	/*
-	 * sub-session proxy pointer
-	 * 
-	 */
-	CRTSecMgrSubSessionProxy* iSubSessionProxy;
-
-	/*
-	 * pointer to Coe environment
-	 */
-	CCoeEnv* iCoeEnv;
-
-	/*
-	 * security manager resource file offset value
-	 * 
-	 */
-	RResourceArray iResourceOffsetArray;
-
-	/*
-	 * Prompt UI option
-	 * 
-	 */
-	TSecMgrPromptUIOption iUIPromptOption;
-	
-	/*
-	 * Custom prompt flag
-	 * 
-	 */
-	TBool isCustomPrompt;
-	};
-
-#endif //_CRTSECMGRSCRIPTSESSION_H_
-