[Release] wrt-installer_0.0.89
[framework/web/wrt-installer.git] / src / jobs / widget_install / task_certificates.cpp
index a302b64..4e41048 100755 (executable)
@@ -83,49 +83,74 @@ void TaskCertificates::SetCertiInfo(CertificateSource source)
 
     FOREACH(it, certificateChainList)
     {
-        LogDebug("Insert certinfo to pkgmgr db");
+        LogDebug("Insert certinfo to pkgmgr structure");
 
         ValidationCore::CertificateCollection chain;
         if (false == chain.load(*it)) {
             LogError("Chain is broken");
+            ThrowMsg(Exceptions::SetCertificateInfoFailed,
+                    "Failed to Installer Save Certinfo");
         }
 
-        chain.sort();
+        if (!chain.sort()){
+            LogError("Chain failed at sorting");
+        }
 
         ValidationCore::CertificateList list = chain.getCertificateList();
 
-
         FOREACH(certIt, list) 
         {
-            ValidationCore::Crypto::Hash::SHA1 sha1;
-            sha1.Append((*certIt)->getDER());
-            sha1.Finish();
-            std::string sha1String = sha1.ToBase64String();
-
-            if ((*certIt)->isRootCert()) {
-                if (source == SIGNATURE_DISTRIBUTOR) {
-                    LogDebug("Set SIGNATURE_DISTRIBUTOR ");
-                    if((pkgmgr_installer_set_cert_value(
-                                    m_pkgHandle,
-                                    PM_SET_DISTRIBUTOR_ROOT_CERT,
-                                    const_cast<char*>(sha1String.c_str()))) < 0) {
-                        LogError("pkgmgrInstallerSetCertValue fail");
-                        ThrowMsg(Exceptions::SetCertificateInfoFailed,
-                                "Failed to Set CertValue");
+            pkgmgr_instcert_type instCertType;
+
+            if (source == SIGNATURE_DISTRIBUTOR) {
+                std::string
+                    Name(DPL::ToUTF8String(*(*certIt)->getOrganizationName()));
+                size_t found = Name.find("Tizen");
+
+                if (found != std::string::npos) {
+                    LogDebug("Set SIGNATURE_DISTRIBUTOR");
+                    if ((*certIt)->isRootCert()) {
+                        instCertType = PM_SET_DISTRIBUTOR_ROOT_CERT;
+                    } else {
+                        if ((*certIt)->isCA()) {
+                            instCertType = PM_SET_DISTRIBUTOR_INTERMEDIATE_CERT;
+                        } else {
+                            instCertType = PM_SET_DISTRIBUTOR_SIGNER_CERT;
+                        }
+                    }
+                } else {
+                    LogDebug("Set SIGNATURE_DISTRIBUTOR2");
+                    if ((*certIt)->isRootCert()) {
+                        instCertType = PM_SET_DISTRIBUTOR2_ROOT_CERT;
+                    } else {
+                        if ((*certIt)->isCA()) {
+                            instCertType = PM_SET_DISTRIBUTOR2_INTERMEDIATE_CERT;
+                        } else {
+                            instCertType = PM_SET_DISTRIBUTOR2_SIGNER_CERT;
+                        }
                     }
                 }
-                else {
-                    LogDebug("set SIGNATURE_AUTHOR");
-                    if((pkgmgr_installer_set_cert_value(
-                                    m_pkgHandle,
-                                    PM_SET_AUTHOR_ROOT_CERT,
-                                    const_cast<char*>(sha1String.c_str()))) < 0) {
-                        LogError("pkgmgrInstallerSetCertValue fail");
-                        ThrowMsg(Exceptions::SetCertificateInfoFailed,
-                                "Failed to Installer Set CertValue");
+            } else {
+                LogDebug("set SIGNATURE_AUTHOR");
+                if ((*certIt)->isRootCert()) {
+                    instCertType = PM_SET_AUTHOR_ROOT_CERT;
+                } else {
+                    if ((*certIt)->isCA()) {
+                        instCertType = PM_SET_AUTHOR_INTERMEDIATE_CERT;
+                    } else {
+                        instCertType = PM_SET_AUTHOR_SIGNER_CERT;
                     }
                 }
             }
+            LogDebug("cert type : " << instCertType);
+            if((pkgmgr_installer_set_cert_value(
+                            m_pkgHandle,
+                            instCertType,
+                            const_cast<char*>(((*certIt)->getBase64()).c_str()))) < 0) {
+                LogError("pkgmgrInstallerSetCertValue fail");
+                ThrowMsg(Exceptions::SetCertificateInfoFailed,
+                        "Failed to Set CertValue");
+            }
         }
     }
 }