[Release] wrt-installer_0.1.53
[framework/web/wrt-installer.git] / src / jobs / widget_install / ace_registration.cpp
index e2077ef..ac266d1 100644 (file)
@@ -137,4 +137,102 @@ bool registerAceWidget(const WrtDB::DbWidgetHandle& widgetHandle,
     delete[] certData;
     return retval == ACE_OK;
 }
+bool registerAceWidgetFromDB(const WrtDB::DbWidgetHandle& widgetHandle)
+{
+    using namespace WrtDB;
+    LogDebug("Updating Ace database from Widget DB");
+    struct widget_info wi;
+    DPL::OptionalString os;
+    WrtDB::WidgetCertificateDataList certList;
+
+    Try {
+        WidgetDAOReadOnly dao(widgetHandle);
+
+        WidgetType type = dao.getWidgetType();
+        if (type == WrtDB::APP_TYPE_WAC20) {
+            wi.type = WAC20;
+        } else if (type == WrtDB::APP_TYPE_TIZENWEBAPP) {
+            wi.type = Tizen;
+        } else {
+            LogError("Unknown application type");
+            return false;
+        }
+
+        wi.id = toAceString(dao.getGUID());
+        wi.version = toAceString(dao.getVersion());
+        wi.author = toAceString(dao.getAuthorName());
+        wi.shareHerf = strdup(dao.getShareHref().c_str());
+        LogDebug("Basic data converted. Certificates begin.");
+        certList = dao.getCertificateDataList();
+    }
+    Catch(WidgetDAOReadOnly::Exception::WidgetNotExist) {
+        LogError("Widget does not exist");
+        return false;
+    }
+
+    //one more element for NULL termination
+    LogDebug("Found: " << certList.size() << " certificates");
+    ace_certificate_data** certData = new ace_certificate_data *
+        [certList.size() + 1];
+    certData[certList.size()] = NULL; // last element set to NULL
+
+    int i = 0;
+    FOREACH(it, certList)
+    {
+        certData[i] = new ace_certificate_data;
+        switch (it->owner) {
+        case WrtDB::WidgetCertificateData::AUTHOR:
+            certData[i]->owner = AUTHOR;
+            break;
+        case WrtDB::WidgetCertificateData::DISTRIBUTOR:
+            certData[i]->owner = DISTRIBUTOR;
+            break;
+        default:
+            LogDebug("Unknown owner type of cert");
+            certData[i]->owner = UNKNOWN;
+            break;
+        }
+        switch (it->type) {
+        case WrtDB::WidgetCertificateData::ENDENTITY:
+            certData[i]->type = ENDENTITY;
+            break;
+        case WrtDB::WidgetCertificateData::ROOT:
+            certData[i]->type = ROOT;
+            break;
+        default:
+            LogError("Unknown type of cert");
+            certData[i]->type = ENDENTITY;
+            break;
+        }
+        certData[i]->chain_id = it->chainId;
+
+        certData[i]->md5_fp = toAceString(it->strMD5Fingerprint);
+        certData[i]->sha1_fp = toAceString(it->strSHA1Fingerprint);
+        certData[i]->common_name =
+            toAceString(DPL::ToUTF8String(it->strCommonName));
+        ++i;
+    }
+
+    LogDebug("Registerign widget in ace");
+    ace_return_t retval = ace_register_widget(
+            static_cast<ace_widget_handle_t>(widgetHandle), &wi, certData);
+
+    //clean up - WidgetInfo
+    free(wi.author);
+    free(wi.id);
+    free(wi.shareHerf);
+    free(wi.version);
+
+    //free cert list
+    i = 0;
+    while (certData[i] != NULL) {
+        free(certData[i]->common_name);
+        free(certData[i]->md5_fp);
+        free(certData[i]->sha1_fp);
+        delete certData[i];
+        ++i;
+    }
+    delete[] certData;
+    return retval == ACE_OK;
+}
 }