Change pkgname to appid for docomo request. PART1
[platform/framework/web/wrt-installer.git] / src / jobs / widget_install / task_certificates.cpp
index 7285b50..42fb092 100755 (executable)
@@ -49,8 +49,30 @@ TaskCertificates::TaskCertificates(InstallerContext& context) :
 void TaskCertificates::StepSetCertiInfo()
 {
     LogDebug("StepSetCertiInfo");
+
+    if (pkgmgr_installer_create_certinfo_set_handle(&m_pkgHandle) < 0) {
+        LogError("pkgmgrInstallerCreateCertinfoSetHandle fail");
+        ThrowMsg(Exceptions::SetCertificateInfoFailed,
+                "Failed to create certificate handle");
+    }
+
     SetCertiInfo(SIGNATURE_AUTHOR);
     SetCertiInfo(SIGNATURE_DISTRIBUTOR);
+
+    if ((pkgmgr_installer_save_certinfo(
+                    const_cast<char*>(DPL::ToUTF8String(
+                            m_context.widgetConfig.tzAppid).c_str()),
+                    m_pkgHandle)) < 0) {
+        LogError("pkgmgrInstallerSaveCertinfo fail");
+        ThrowMsg(Exceptions::SetCertificateInfoFailed,
+                "Failed to Installer Save Certinfo");
+    } else {
+        LogDebug("Succeed to save Certinfo");
+    }
+
+    if (pkgmgr_installer_destroy_certinfo_set_handle(m_pkgHandle) < 0) {
+        LogError("pkgmgrInstallerDestroyCertinfoSetHandle fail");
+    }
 }
 
 void TaskCertificates::SetCertiInfo(CertificateSource source)
@@ -59,68 +81,75 @@ void TaskCertificates::SetCertiInfo(CertificateSource source)
     CertificateChainList certificateChainList;
     m_context.wacSecurity.getCertificateChainList(certificateChainList, source);
 
-    pkgmgr_instcertinfo_h handle;
-
     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 (pkgmgr_installer_create_certinfo_set_handle(&handle)< 0) {
-                LogError("pkgmgrInstallerCreateCertinfoSetHandle fail");
-                ThrowMsg(Exceptions::SetCertificateInfoFailed,
-                        "Failed to create certificate handle");
-            }
+            pkgmgr_instcert_type instCertType;
 
             if (source == SIGNATURE_DISTRIBUTOR) {
-                if((pkgmgr_installer_set_cert_value(
-                                handle,
-                                PM_SET_DISTRIBUTOR_SIGNER_CERT,
-                                const_cast<char*>(sha1String.c_str()))) < 0) {
-                    LogError("pkgmgrInstallerSetCertValue fail");
-                    ThrowMsg(Exceptions::SetCertificateInfoFailed,
-                            "Failed to Set CertValue");
+                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 {
-                if((pkgmgr_installer_set_cert_value(
-                                handle,
-                                PM_SET_AUTHOR_SIGNER_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;
+                    }
                 }
             }
-
-            if ((pkgmgr_installer_save_certinfo(
-                            const_cast<char*>(DPL::ToUTF8String(
-                                    *m_context.widgetConfig.pkgname).c_str()),
-                            handle)) < 0) {
-                LogError("pkgmgrInstallerSaveCertinfo fail");
+            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 Installer Save Certinfo");
-            } else {
-                LogDebug("Succeed to save Certinfo");
-            }
-
-            if (pkgmgr_installer_destroy_certinfo_set_handle(handle) < 0) {
-                LogError("pkgmgrInstallerDestroyCertinfoSetHandle fail");
+                        "Failed to Set CertValue");
             }
         }
     }
@@ -128,13 +157,12 @@ void TaskCertificates::SetCertiInfo(CertificateSource source)
 
 void TaskCertificates::StepAbortCertiInfo()
 {
-    pkgmgr_instcertinfo_h handle;
-
     if ((pkgmgr_installer_delete_certinfo(
-            const_cast<char*>(DPL::ToUTF8String(
-                *m_context.widgetConfig.pkgname).c_str()))) < 0) {
+                    const_cast<char*>(DPL::ToUTF8String(
+                            m_context.widgetConfig.tzAppid).c_str()))) < 0) {
         LogError("pkgmgr_installer_delete_certinfo fail");
     }
 }
-}
-}
+
+} //namespace WidgetInstall
+} //namespace Jobs