javatools/javacontrolpanel/controlpanel/src.s60/security.cpp
branchRCL_3
changeset 24 6c158198356e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javatools/javacontrolpanel/controlpanel/src.s60/security.cpp	Thu Aug 19 09:48:13 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2010 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 <centralrepository.h>
+#include <SWInstallerInternalCRKeys.h>
+
+#include "security.h"
+#include "logger.h"
+#include "javastoragenames.h"
+#include "securitystoragedatadefs.h"
+
+using namespace java::storage;
+using namespace std;
+
+_LIT(KS60SecurityPolicy,  "s60");
+_LIT(KMSASecurityPolicy,  "msa");
+_LIT(KATTSecurityPolicy,  "att");
+// Java Security Policy Central Repository UID
+static const TUid KCRUidJavaSecurity = { 0x2001B289 };
+// IDs for security folder and file keys
+static const TUint32 KPolicy = 0x03;
+static const TUint32 KSecurityWarnings = 0x04;
+
+const int S60_SECURITY_POLICY_ID = 1;
+const int MSA_SECURITY_POLICY_ID = 2;
+const int ATT_SECURITY_POLICY_ID = 3;
+
+
+Security::Security()
+{
+    try
+    {
+        iStorage.reset(JavaStorage::createInstance());
+        iStorage->open();
+    }
+    catch (JavaStorageException& e)
+    {
+        ELOG1(EUtils, "open storage connection failed, %s",  e.toString().c_str());
+    }
+}
+
+Security::~Security()
+{
+}
+
+std::wstring Security::getSecurityWarningsMode()
+{
+    try
+    {
+        JavaStorageApplicationEntry_t query;
+        JavaStorageApplicationList_t queryResult;
+        JavaStorageEntry attr;
+        attr.setEntry(ID, L"");
+        query.insert(attr);
+        attr.setEntry(SECURITY_WARNINGS, L"");
+        query.insert(attr);
+        iStorage->search(MIDP_PACKAGE_TABLE, query, queryResult);
+        JavaStorageApplicationList_t::const_iterator iterator;
+        JavaStorageApplicationList_t domainQueryResult;
+        for (iterator = queryResult.begin(); iterator != queryResult.end(); iterator++)
+        {
+            std::wstring securityWarnings = L"";
+            JavaStorageApplicationEntry_t entry = (*iterator);
+            findColumn(entry, SECURITY_WARNINGS, securityWarnings);
+            if (securityWarnings == SECURITY_WARNINGS_USER_DEFINED_MODE)
+            {
+                // make them all USER
+                setSecurityWarningsMode(SECURITY_WARNINGS_USER_DEFINED_MODE);
+                return SECURITY_WARNINGS_USER_DEFINED_MODE;
+            }
+        }
+    }
+    catch (JavaStorageException& aJse)
+    {
+    }
+    // one more check: central repository
+    std::wstring securityWarningsMode = SECURITY_WARNINGS_DEFAULT_MODE;
+    TRAP_IGNORE
+    (
+        CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity);
+        TInt warningsMode;
+        User::LeaveIfError(repository->Get(KSecurityWarnings, warningsMode));
+        switch (warningsMode)
+        {
+        case 1:
+            securityWarningsMode = SECURITY_WARNINGS_USER_DEFINED_MODE;
+            break;
+        case 2:
+            securityWarningsMode = SECURITY_WARNINGS_DEFAULT_MODE;
+            break;
+        }
+        CleanupStack::PopAndDestroy(repository);
+    );
+    return securityWarningsMode;
+}
+
+void Security::setSecurityWarningsMode(const std::wstring& aSecurityWarningsMode)
+{
+    try
+    {
+        JavaStorageApplicationEntry_t query;
+        JavaStorageApplicationList_t queryResult;
+        JavaStorageEntry attr;
+        attr.setEntry(ID, L"");
+        query.insert(attr);
+        iStorage->search(MIDP_PACKAGE_TABLE, query, queryResult);
+        JavaStorageApplicationList_t::const_iterator iterator;
+        JavaStorageApplicationList_t domainQueryResult;
+        for (iterator = queryResult.begin(); iterator != queryResult.end(); iterator++)
+        {
+            std::wstring uid = L"";
+            JavaStorageApplicationEntry_t entry = (*iterator);
+            findColumn(entry, ID, uid);
+            JavaStorageApplicationEntry_t oldEntry;
+            JavaStorageEntry oldAttr;
+            oldAttr.setEntry(ID, uid);
+            oldEntry.insert(oldAttr);
+            attr.setEntry(SECURITY_WARNINGS, aSecurityWarningsMode);
+            entry.clear();
+            entry.insert(attr);
+            iStorage->update(MIDP_PACKAGE_TABLE, entry, oldEntry);
+        }
+    }
+    catch (JavaStorageException& aJse)
+    {
+    }
+    // set the cenRep key as well
+    TRAP_IGNORE
+    (
+        CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity);
+        if (aSecurityWarningsMode == SECURITY_WARNINGS_USER_DEFINED_MODE)
+        {
+            repository->Set(KSecurityWarnings, 1);
+        }
+        else
+        {
+            repository->Set(KSecurityWarnings, 2);
+        }
+        CleanupStack::PopAndDestroy(repository);
+    );
+}
+
+void Security::findColumn(const JavaStorageApplicationEntry_t& aEntry,
+                           const wstring& aColName, wstring& aColValue)
+{
+    JavaStorageEntry findPattern;
+    findPattern.setEntry(aColName, L"");
+    JavaStorageApplicationEntry_t::const_iterator findIterator =
+        aEntry.find(findPattern);
+    if (findIterator != aEntry.end())
+    {
+        aColValue = findIterator->entryValue();
+    }
+}
+
+int Security::getSecurityPolicy()
+{
+    int securityPolicyId = S60_SECURITY_POLICY_ID;
+    TRAP_IGNORE
+    (
+        CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity);
+        HBufC* buf = HBufC::NewLC(NCentralRepositoryConstants::KMaxUnicodeStringLength);
+        TPtr policy(buf->Des());
+        User::LeaveIfError(repository->Get(KPolicy, policy));
+        if (policy.Compare(KS60SecurityPolicy) == 0)
+        {
+            securityPolicyId = S60_SECURITY_POLICY_ID;
+        }
+        else if (policy.Compare(KMSASecurityPolicy) == 0)
+        {
+            securityPolicyId = MSA_SECURITY_POLICY_ID;
+        }
+        else if (policy.Compare(KATTSecurityPolicy) == 0)
+        {
+            securityPolicyId = ATT_SECURITY_POLICY_ID;
+        }
+        CleanupStack::PopAndDestroy(buf);
+        CleanupStack::PopAndDestroy(repository);
+    );
+    return securityPolicyId;
+
+}
+
+void Security::setSecurityPolicy(int aSecurityPolicyId)
+{
+    TRAP_IGNORE
+    (
+        CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity);
+        switch (aSecurityPolicyId)
+        {
+        case S60_SECURITY_POLICY_ID:
+            User::LeaveIfError(repository->Set(KPolicy, KS60SecurityPolicy));
+            break;
+        case MSA_SECURITY_POLICY_ID:
+            User::LeaveIfError(repository->Set(KPolicy, KMSASecurityPolicy));
+            break;
+        case ATT_SECURITY_POLICY_ID:
+            User::LeaveIfError(repository->Set(KPolicy, KATTSecurityPolicy));
+            break;
+        }
+    CleanupStack::PopAndDestroy(repository);
+    );
+}
+
+