webservices/wsdescription/src/senidentityprovider.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsdescription/src/senidentityprovider.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,425 @@
+/*
+* 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:           
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+
+#include <SenServiceConnection.h> // framework IDs
+#include <SenXmlElement.h> // check if this include is needed(?)
+#include <SenXmlUtils.h>
+
+// #include "SenDebug.h"
+
+//#include "MSenIdentityManager.h"
+#include "SenIdentityProvider.h"
+
+// CONSTANTS
+
+
+
+
+namespace
+    {
+    _LIT8(KDefaultIdentityAttributeName,    "default");
+    _LIT8(KNewElementName,                  "IdentityProvider");
+    _LIT8(KServiceID,                       "ServiceID");
+//    _LIT8(KFakeIMEI8,                       "012345678901234");
+    }
+
+EXPORT_C CSenIdentityProvider::CSenIdentityProvider(
+                                                TDescriptionClassType aType)
+: CSenXmlServiceDescription(aType)
+    {
+    }
+
+EXPORT_C const TDesC8& CSenIdentityProvider::NewElementName()
+    {
+    return KNewElementName();
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewL(
+                                                    const TDesC8& aEndpoint)
+    {
+    CSenIdentityProvider* pNew = NewLC(aEndpoint);
+    CleanupStack::Pop();
+    return(pNew);
+    }
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewLC(
+                                                    const TDesC8& aEndpoint)
+    {
+    CSenIdentityProvider* pNew =
+        new (ELeave) CSenIdentityProvider(EIdentityProvider);
+
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aEndpoint);
+    return pNew;
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewL(
+                                                    const TDesC8& aEndpoint,
+                                                    const TDesC8& aContract )
+    {
+    CSenIdentityProvider* pNew = NewLC(aEndpoint, aContract);
+    CleanupStack::Pop();
+    return(pNew) ;
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewLC(
+                                                    const TDesC8& aEndpoint,
+                                                    const TDesC8& aContract )
+    {
+    CSenIdentityProvider* pNew =
+        new (ELeave) CSenIdentityProvider(EIdentityProvider);
+
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aEndpoint, aContract);
+    return pNew;
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewL(
+                                                    const TDesC8& aEndpoint,
+                                                    const TDesC8& aContract,
+                                                    const TDesC8& aProviderID)
+    {
+    CSenIdentityProvider* pNew = NewLC(aEndpoint, aContract, aProviderID);
+    CleanupStack::Pop();
+    return(pNew) ;
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewLC(
+                                                    const TDesC8& aEndpoint,
+                                                    const TDesC8& aContract,
+                                                    const TDesC8& aProviderID)
+    {
+    CSenIdentityProvider* pNew =
+        new (ELeave) CSenIdentityProvider(EIdentityProvider);
+
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aEndpoint, aContract, aProviderID);
+    return pNew;
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewL(
+                                                    const TDesC8& aEndpoint,
+                                                    const TDesC8& aContract,
+                                                    const TDesC8& aProviderID,
+                                                    const TDesC8& aServiceID)
+    {
+    CSenIdentityProvider* pNew = NewLC(aEndpoint, aContract,
+                                        aProviderID, aServiceID);
+    CleanupStack::Pop();
+    return(pNew) ;
+    }
+
+EXPORT_C CSenIdentityProvider* CSenIdentityProvider::NewLC(
+                                                    const TDesC8& aEndpoint,
+                                                    const TDesC8& aContract,
+                                                    const TDesC8& aProviderID,
+                                                    const TDesC8& aServiceID)
+    {
+    CSenIdentityProvider* pNew =
+        new (ELeave) CSenIdentityProvider(EIdentityProvider);
+
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aEndpoint, aContract, aProviderID, aServiceID);
+    return pNew;
+    }
+
+
+
+EXPORT_C void CSenIdentityProvider::ConstructL(const TDesC8& aEndpoint)
+    {
+    if(aEndpoint.Length()>0)
+        {
+        CSenXmlServiceDescription::ConstructL(aEndpoint, KSenIdpLibertyIdWsfAsContract);
+        SetFrameworkIdL( KDefaultIdWsfFrameworkID );
+        }
+    else
+        {
+        CSenXmlServiceDescription::ConstructL();
+        }
+    }
+
+EXPORT_C void CSenIdentityProvider::ConstructL( const TDesC8& aEndpoint,
+                                                const TDesC8& aContract)
+    {
+    if(aContract.Length()>0)
+        {
+        CSenXmlServiceDescription::ConstructL(aEndpoint, aContract);
+        }
+    else
+        {
+        // Defaults to ID-WSF framework authentication service contract:
+        // - "urn:liberty:as:2004-04".
+        ConstructL(aEndpoint);
+        }
+    }
+
+EXPORT_C void CSenIdentityProvider::ConstructL( const TDesC8& aEndpoint,
+                                                const TDesC8& aContract,
+                                                const TDesC8& aProviderID)
+    {
+    ConstructL(aEndpoint, aContract);
+    if(aProviderID.Length()>0)
+        {
+        SetProviderID(aProviderID);
+        }
+    // else: no <ProviderID> child element will be added
+    }
+
+EXPORT_C void CSenIdentityProvider::ConstructL( const TDesC8& aEndpoint,
+                                                const TDesC8& aContract,
+                                                const TDesC8& aProviderID,
+                                                const TDesC8& aServiceID)
+    {
+    ConstructL(aEndpoint, aContract, aProviderID);
+    if(aServiceID.Length()>0)
+        {
+        SetServiceID(aServiceID);
+        }
+    // else: no <ServiceID> child element will be added
+    }
+
+//////////////////////////////////////////////////////////////////////////
+
+
+EXPORT_C CSenIdentityProvider::~CSenIdentityProvider()
+    {
+    }
+
+EXPORT_C TPtrC8 CSenIdentityProvider::UserName()
+    {
+    TPtrC8 username = AuthzID();
+    if (username.Length()==0)
+        {
+        return AdvisoryAuthnID();
+        }
+    return username;
+    }
+
+EXPORT_C TPtrC8 CSenIdentityProvider::AuthzID()
+    {
+    return ContentOf( KSenIdpAuthzIDLocalname() );
+    }
+
+EXPORT_C TPtrC8 CSenIdentityProvider::AdvisoryAuthnID()
+    {
+    return ContentOf( KSenIdpAdvisoryAuthnIdLocalname() );
+    }
+
+EXPORT_C TPtrC8 CSenIdentityProvider::ProviderID()
+    {
+    return ContentOf( KSenIdpProviderIdLocalname() );
+    }
+
+EXPORT_C TPtrC8 CSenIdentityProvider::Password()
+    {
+    return ContentOf( KSenIdpPasswordLocalname() );
+    }
+
+EXPORT_C const TDesC8& CSenIdentityProvider::IMEI()
+    {
+    return KFakeIMEI8();
+    }
+
+EXPORT_C TBool CSenIdentityProvider::IsDefault()
+    {
+    TBool ret = EFalse;
+    if ( AsElement().AttrValue( KDefaultIdentityAttributeName ) )
+        {
+        ret = ETrue;
+        }
+
+    return ret;
+    }
+//EXPORT_C TInt CSenIdentityProvider::SetUserInfo(const TDesC8& aAuthzID,
+//                                                const TDesC8& aAdvisoryAuthnID,
+//                                                const TDesC8& aPassword )
+//    {
+//    TInt leaveCode(KErrNone);
+//    TRAP(leaveCode, SetUserInfoL(aAuthzID, aAdvisoryAuthnID, aPassword));
+//    return leaveCode;
+//    }
+    
+EXPORT_C TInt CSenIdentityProvider::SetUserInfoL(const TDesC8& aAuthzID,
+                                                const TDesC8& aAdvisoryAuthnID,
+                                                const TDesC8& aPassword )
+    {
+    // For MS this function sud be commented as WLM already send xml encoded password
+    //HBufC8* encPassword = SenXmlUtils::EncodeHttpCharactersLC(aPassword);
+    if(aAuthzID.Length()>0)
+        {
+        SetContentOfL(KSenIdpAuthzIDLocalname, aAuthzID);
+        }
+    if(aAdvisoryAuthnID.Length()>0)
+        {
+        SetContentOfL(KSenIdpAdvisoryAuthnIdLocalname, aAdvisoryAuthnID);
+        }
+    //if(aPassword.Length()>0) // in order to clean password, when listing accounts
+        {
+        SetContentOfL(KSenIdpPasswordLocalname, aPassword );
+        }
+    //CleanupStack::PopAndDestroy(encPassword);
+    return KErrNone;
+    }
+
+EXPORT_C TInt CSenIdentityProvider::SetAccountExtensionsL(const TDesC8& aDetail)
+    {
+    SetContentOfL(KSenAccountExtensions, aDetail);
+    //CSenElement* elem = NULL;
+    //AddElementL(elem);
+    return KErrNone;
+    }
+
+EXPORT_C TPtrC8 CSenIdentityProvider::AccountExtensions(CSenElement*& aAccExt)
+    {
+    aAccExt = this->AsElement().Element(KSenAccountExtensions());
+    return ContentOf( KSenAccountExtensions() );
+    }
+
+EXPORT_C TBool CSenIdentityProvider::IsTrustedByL(
+                        MSenServiceDescription& aServiceDescription )
+    {
+    TBool retVal(EFalse);
+    TPtrC8 endpoint = aServiceDescription.Endpoint();
+    TPtrC8 contract = aServiceDescription.Contract();
+
+    TPtrC8 providerID = ProviderID();
+    if(providerID.Length()>0)
+        {
+        if((endpoint.Length() > 0) && (providerID.Length() > 0)
+                       && endpoint == providerID)
+            {
+            retVal = ETrue;
+            }
+        }
+
+    if(!retVal) // no need to allocate new array etc if we already have a trust
+        {
+        // owned elsewhere:
+        RPointerArray<CSenElement> services = AsElement().ElementsL();
+        TInt serviceCount = services.Count();
+        TInt i(0);
+        while (!retVal && i < serviceCount)
+            {
+            if(services[i]->LocalName() == KServiceID)
+                {
+                TPtrC8 serviceID = services[i]->Content();
+
+                if(serviceID.Length()>0 &&
+                        ( (endpoint.Length() > 0 && serviceID == endpoint)
+                                       ||
+                          (contract.Length() > 0 && serviceID == contract))
+                   )
+                    {
+                    retVal = ETrue;
+                    }
+                }
+            i++;
+            }
+        }
+
+    return retVal;
+    }
+
+EXPORT_C TBool CSenIdentityProvider::IsTrustedByL( const TDesC8& aProviderIdOrServiceId )
+    {
+    //SENDEBUG_L("CSenIdentityProvider::IsTrustedByL");
+    TBool trusted(EFalse);
+    TPtrC8 providerID = ProviderID();
+    if(providerID.Length()>0)
+        {
+        if(aProviderIdOrServiceId == providerID)
+            {
+            //SENDEBUG_L("  The ProviderID's are equal.");
+            trusted = ETrue;
+            }
+        }
+
+    if(!trusted) // no need for new array etc if we already have a trust
+        {
+        RPointerArray<CSenElement> services = AsElement().ElementsL();
+        TInt serviceCount = services.Count();
+        TInt i(0);
+        while (!trusted && i < serviceCount)
+            {
+            if (services[i]->LocalName() == KServiceID )
+                {
+                TPtrC8 serviceID = services[i]->Content();
+                if (serviceID.Length()>0 && serviceID == aProviderIdOrServiceId)
+                    {
+                    trusted = ETrue;
+                    }
+                }
+            i++;
+            }
+        }
+    return trusted;
+    }
+
+EXPORT_C TInt CSenIdentityProvider::SetProviderID( const TDesC8& aProviderID )
+    {
+    TInt retVal(KErrNone);
+    TInt leaveCode(KErrNone);
+    TRAP( leaveCode, retVal = SetProviderIdL( aProviderID ); )
+    if ( leaveCode )
+        {
+        retVal = leaveCode;
+        }
+    return retVal;
+    }
+    
+EXPORT_C TInt CSenIdentityProvider::SetProviderIdL( const TDesC8& aProviderID )
+    {
+    if ( aProviderID.Length() == 0 )
+        {
+        return KErrArgument; // zero-length provider ID
+        }
+    else 
+        {
+        SetContentOfL( KSenIdpProviderIdLocalname, aProviderID );
+        return KErrNone;
+        }
+    }
+
+EXPORT_C TInt CSenIdentityProvider::SetServiceID( const TDesC8& aServiceID )
+    {
+    TInt retVal(KErrNone);
+    if(aServiceID.Length()>0)
+        {
+        TRAP(retVal, SetContentOfL(KServiceID, aServiceID);)
+        }
+    return retVal;
+    }
+
+// @deprecated. This method is no longer in use. Kept only to keep BC with 3.0
+EXPORT_C HBufC8* CSenIdentityProvider::HttpCredentialsL( MSenIdentityManager& /* aMgr */ )
+    {
+    return NULL;
+    }
+
+// End of File
+