webservices/wsidentitymanager/inc/senbaseidentitymanager.h
changeset 0 62f9d29f7211
child 7 7bc6ab9b5bcd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsidentitymanager/inc/senbaseidentitymanager.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,387 @@
+/*
+* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "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: Header declaration
+*
+*/
+
+
+
+
+
+
+
+
+#ifndef SEN_BASE_IDENTITY_MANAGER_H
+#define SEN_BASE_IDENTITY_MANAGER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <ecom.h>
+#include <flogger.h>    // RFileLogger
+#include <badesca.h>    // CDesC8Array
+
+#include <SenIdentityProvider.h>
+#include <SenBaseFragment.h>
+
+#include "senbaseidentity.h"
+#include "msenidentitymanager.h" 
+
+
+
+
+// CONSTANTS
+#ifndef RD_SEN_COMPILE_SIS_PACKAGE_FILES
+const TUid KUidSechMech = {0x101F96FC};
+#else
+const TUid KUidSechMech = {0x101F9733};
+#endif
+// FORWARD DECLARATIONS
+class CSenSenSecurityMechanismObserver;
+class MSenCoreServiceManager;
+
+// CLASS DECLARATION
+class CSenBaseIdentityManager : public CSenBaseFragment,
+                                public MSenIdentityManager
+    {
+    public: // Constructors and destructor
+    
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CSenBaseIdentityManager* NewL(
+                                            MSenCoreServiceManager& aManager);
+        IMPORT_C static CSenBaseIdentityManager* NewLC(
+                                            MSenCoreServiceManager& aManager);
+
+        IMPORT_C virtual ~CSenBaseIdentityManager();
+        
+        // New functions
+        
+        void ReloadSenSecurityMechanismsL();
+
+        // Functions from base classes
+        
+        // from MSenIdentityManager
+        TPtrC8 SenSecurityMechanismNames8L();
+        CSenSecurityMechanism* MechanismNamedL(const TDesC8& aName);
+
+        /**
+        * Initialize this SenBaseIdentityManager by parsing
+        * the given file with the given XMLReader.
+        * The file is expected to contain valid XML that
+        * follows the example given above.
+        * @param file
+        * @param reader
+        */
+        void LoadFromL(TDesC& aFile, CSenXmlReader& aReader);
+
+
+        /**
+        * Save the current state of the SenBaseIdentityManager as an XML
+        * document into a file.
+        * Statuscodes:
+        *   KErrNone                Ok
+        *  Other codes are system error codes.
+        * @return status code.
+        */
+        IMPORT_C TInt WriteDatabase();
+
+        /**
+        * Creates the element. Overrides CSenBaseFragment
+        * StartElementL-function
+        * @param aNsUri name space URI
+        * @param aLocalName local name
+        * @param aQName cue name
+        * @param apAttrs XML attributes
+        */
+        virtual void StartElementL( const TDesC8& aNsUri,
+                                    const TDesC8& aLocalName,
+                                    const TDesC8& aQName,
+                                    const RAttributeArray& aAttributes);
+
+        /**
+        * Implements MSenIdentityManager
+        * @return the currently active default identity.
+        */
+        virtual MSenIdentity& IdentityL();
+
+        /**
+        * Implements MSenIdentityManager
+        * @param On the return, contains the (System) userName of the
+        *        currently active user.
+        * @return KErrNone if no error, or some of the system wide error codes
+        */
+        virtual TInt UserNameL(HBufC8*& aUserName);
+
+        /**
+        * Implements MSenIdentityManager
+        * @return the default IdentityProvider of the currently active
+        *         Identity.
+        */
+        virtual CSenIdentityProvider* IdentityProviderL();
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aServiceDescription
+        * @return the IdentityProvider of the currently active Identity.
+        */
+        virtual CSenIdentityProvider* IdentityProviderL(
+                                MSenServiceDescription& aServiceDescription );
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aURI
+        * @return the IdentityProvider of the currently active Identity.
+        */
+        virtual CSenIdentityProvider* IdentityProviderL(const TDesC8& aURI );
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aIdpList an array of ProviderIDs
+        * @param aStrict if set to true only an IdentityProvider from the List
+        * will be returned, and null if none of the list entries is known to
+        * the current active Identity.
+        * @return the currently preferred IdentityProvider.
+        */
+        virtual CSenIdentityProvider* IdentityProviderL(
+                                const CDesC8Array& aIdpList, TBool aStrict);
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aServiceDescription
+        * @param aIdpList an array of ProviderIDs
+        * @param aStrict if set to true only an IdentityProvider from the List
+        * will be returned, and null if none of the list entries is known to
+        * the current active Identity.
+        * @return the currently preferred IdentityProvider.
+        */
+        virtual CSenIdentityProvider* IdentityProviderL(
+                                MSenServiceDescription& aServiceDescription,
+                                const CDesC8Array& aIdpList,
+                                TBool aStrict);
+
+        /**
+        * Checks if there already is an identity provider with given data.
+        * Existing identity provider can still have more data than the pattern.
+        * @param    aContains   will contain the boolean value on return. ETrue if
+        *           contains, EFalse otherwise.
+        * @param    aIDP    the pattern identity provider.
+        * @return KErrNone or system-wide error code.
+        */
+        virtual TInt ContainsIdentityProviderL(
+                                       TBool& aContains,
+                                       CSenIdentityProvider& aIDP);
+
+        /**
+        * Implements MSenIdentityManager
+        * Ownerships is transferred
+        * @param aIdp a registered IdentityProvider
+        * @return KErrNone if successful.
+        */
+        virtual TInt RegisterIdentityProviderL(CSenIdentityProvider* apIdp );
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aIdp an unregistered IdentityProvider
+        * @return KErrNone if successful.
+        *         KErrNotFound if IdentityProvider was not found.
+        *         Other return values are symbian system-wide error codes.
+        */
+        virtual TInt UnregisterIdentityProviderL(CSenIdentityProvider& aIdp );
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aServiceID the contract or endpoint of a service
+        * @param aProviderID the id of an IdentityProvider
+        * @return true if successful. Failure may be caused by non-existence
+        * of the IdentityProvider for the current user.
+        */
+        virtual TBool AssociateServiceL(const TDesC8& aServiceID,
+                                        const TDesC8& aProviderID );
+
+        /**
+        * Implements MSenIdentityManager
+        * @param aServiceID the contract or endpoint of a service
+        * @param aProviderID the id of an IdentityProvider
+        * @return true if successful. Failure may be caused by non-existence
+        * of the IdentityProvider for the current user.
+        */
+        virtual TBool DissociateServiceL(const TDesC8& aServiceID,
+                                         const TDesC8& aProviderID );
+
+        /**
+        * Implements MSenIdentityManager
+        * Status codes:
+        *   KErrNone                        ok
+        *   KErrNotFound                    no identities
+        *   Other codes are system error codes
+        * @param aIdentitiesList an array where the identities can be inserted
+        * @return status/error code.
+        */
+        virtual TInt IdentitiesL( CDesC8Array& aIdentitiesList );
+
+        /**
+        * NOTE! This code does not do as documentation states.
+        * Only second line text is shown and
+        * "Ok" button on the left side.
+        * @return the value of button pressed (OK or CANCEL)
+        */
+        virtual TInt YesNoQueryL(const TDesC& aLine1,
+                                 const TDesC& aLine2,
+                                 const TDesC& aButton1,
+                                 const TDesC& aButton2);
+
+        virtual TInt AuthenticationForL(CSenIdentityProvider& aAccount, TPckgBuf<TSenAuthentication>& aResponse);
+
+        /**
+        * For encoding and decoding base 64:
+        */
+        virtual HBufC8* EncodeToBase64LC(const TDesC8& aSource);
+        virtual HBufC8* DecodeFromBase64LC(const TDesC8& aSource);
+        
+        virtual TInt FindMatchingIdentityProviderL(CSenIdentityProvider &aIdp,
+                                                   CSenIdentityProvider*& apMatch);
+        
+        virtual TInt UpdateIdentityProviderL(CSenIdentityProvider& aIdp);
+
+        /**
+        * "Enables/disables" -flag which determines if UI interaction with end-user is allowed or not
+        */
+        virtual void SetShowPasswordDialog(const TBool aState);
+
+        RFileLogger* Log();
+        /** Improved heuristics from Identity DB removal / cleanups
+		*
+		* It finds the matching IdentityProvider child elements of current Identity 
+		* element using the service description and add the touch attribute to all 
+		* matched IdentityProvider elements with current tick count value.
+		* If touch attribute already there it will be replaced with new current 
+		* tick count value.
+		*
+		* @param asd     is the new established session service description.
+		* Leave codes: Symbian system-wide error codes.  
+		*/
+        IMPORT_C void UpdateTouchIdentityDBL(MSenServiceDescription& asd);
+        
+        
+        /**
+        * Implements MSenIdentityManager
+        * @return the default IdentityProvider of the currently active
+        *         Identity.
+        */
+        const virtual RPointerArray<CSenIdentityProvider>& IdentityProvidersL();
+
+    protected: 
+    
+        /**
+        * C++ default constructor.
+        */
+        CSenBaseIdentityManager(MSenCoreServiceManager& aManager);
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+    
+        // New functions
+        
+        /**
+        * Save the current state of the SenBaseIdentityManager as an XML
+        * document into a file.
+        * Status codes:
+        *   KErrNone                Ok
+        *   Other codes are system error codes.
+        * @return status code.
+        */
+        virtual TInt WriteConfigurationToL( const TDesC& aFile );
+        TBool AllowSavePasswordL();
+        /** Improved heuristics from Identity DB removal / cleanups : Naga
+	    *
+	    * Checks touch attribute value for all IdentityProvider child elements of 
+	    * current Identity element if that exceeds the the tick counts for two weeks 
+	    * (Max tick count) or if it is greater than current tick count value it removes 
+	    * the corresponding IdentityProvider child element from the Identity element 
+	    * child list.    
+	    * 
+	    * 1 millisec = 1 tick
+		* 86400 sec = 1 day
+		* 86400*1000 millisec = 1 day
+		* 86400*14*1000 = 1209600000 millisec = 2 weeks
+		* So if attr val >= 1209600000 or > current tick count.
+		* Note: always attr val should be <= current tick count.
+		*
+	    * eg;
+	    * Before call to CleanupUnusedIdentityDBL()
+	    * <Users>
+		* <User>
+		* <Identity>
+		* <IdentityProvider>
+  		* <Endpoint>http://10.21.32.20/WSStar/CredMan/STS.aspx</Endpoint> 
+  		* .........
+  		* ..........
+  		* </IdentityProvider>
+		* <IdentityProvider touch="1000">
+  		* <Endpoint>http://10.21.32.20/WSStar/CredMan/STS_001.aspx</Endpoint> 
+  		* ..........
+  		* ..........
+  		* </IdentityProvider>
+  		* <IdentityProvider touch="1309600000">
+  		* <Endpoint>http://10.21.32.20/WSStar/CredMan/Webservises.aspx</Endpoint> 
+  		* ..........
+  		* ............
+  		* </IdentityProvider>
+		* </Identity>
+  		* </User>
+  		* </Users>
+		* 
+		* After call to CleanupUnusedIdentityDBL()
+	    * <Users>
+		* <User>
+		* <Identity>
+		* <IdentityProvider>
+  		* <Endpoint>http://10.21.32.20/WSStar/CredMan/STS.aspx</Endpoint> 
+  		* .........
+  		* ..........
+  		* </IdentityProvider>
+		* <IdentityProvider touch="1000">
+  		* <Endpoint>http://10.21.32.20/WSStar/CredMan/STS_001.aspx</Endpoint> 
+  		* ..........
+  		* ..........
+  		* </IdentityProvider>
+  		* </Identity>
+  		* </User>
+  		* </Users>
+  		* 
+		* Leave codes: Symbian system-wide error codes.
+	    */
+        void CleanupUnusedIdentityDBL();
+
+    protected: // Data
+        CSenBaseIdentity* iIdentity;
+        CSenIdentityProvider* iProvider;
+        MSenCoreServiceManager& iManager;
+        TBool iConfigReadonly;
+        RFileLogger* iLog;   // not owned (no create/close)
+        CSenSenSecurityMechanismObserver* iObserver;
+        CBufFlat* ipMechanicsNames;
+        HBufC8* ipDeviceID;     // Owned
+        RImplInfoPtrArray       iEcomInfoArray;
+        RPointerArray<HBufC8>   iSechMechNames;
+        RPointerArray<HBufC8>   iSechMechCues;
+        TBool iShowPasswordDialog;
+    };
+
+#endif // SEN_BASE_IDENTITY_MANAGER_H
+
+// End of File