[Release] wrt-installer_0.1.23
[framework/web/wrt-installer.git] / src / jobs / widget_install / task_encrypt_resource.cpp
index b88c27f..ee55ea5 100644 (file)
@@ -99,7 +99,7 @@ FILE* openFile(const std::string& path, const std::string& mode)
 
     if (NULL == result)
     {
-        ThrowMsg(Jobs::WidgetInstall::Exceptions::InternalError,
+        ThrowMsg(Jobs::WidgetInstall::Exceptions::EncryptionFailed,
                  "Could not open file " << path);
     }
 
@@ -129,7 +129,7 @@ std::size_t readBytes(unsigned char* buffer, std::size_t count, FILE* stream)
         {
             if (EINTR != error)
             {
-                ThrowMsg(Jobs::WidgetInstall::Exceptions::InternalError,
+                ThrowMsg(Jobs::WidgetInstall::Exceptions::ErrorExternalInstallingFailure,
                          "Error while reading data" <<
                          " [" << DPL::GetErrnoString(error) << "]");
             }
@@ -161,7 +161,7 @@ void writeBytes(unsigned char* buffer, std::size_t count, FILE* stream)
         if ((bytesWritten != bytesToWrite) && (EINTR != errno))
         {
             int error = errno;
-            ThrowMsg(Jobs::WidgetInstall::Exceptions::InternalError,
+            ThrowMsg(Jobs::WidgetInstall::Exceptions::EncryptionFailed,
                      "Error while writing data" <<
                      " [" << DPL::GetErrnoString(error) << "]");
         }
@@ -252,7 +252,7 @@ void TaskEncryptResource::EncryptDirectory(std::string path)
         int error = errno;
         LogWarning(__PRETTY_FUNCTION__ << ": fts_open failed with error: "
                                        << strerror(error));
-        ThrowMsg(Exceptions::InternalError, "Error reading directory: "
+        ThrowMsg(Exceptions::EncryptionFailed, "Error reading directory: "
                  << path);
     }
 
@@ -283,7 +283,7 @@ void TaskEncryptResource::EncryptDirectory(std::string path)
                        << ftsent->fts_path
                        << " with error: "
                        << strerror(ftsent->fts_errno));
-            ThrowMsg(Exceptions::InternalError, "Error reading file");
+            ThrowMsg(Exceptions::EncryptionFailed, "Error reading file");
             break;
         }
     }
@@ -297,100 +297,93 @@ void TaskEncryptResource::EncryptDirectory(std::string path)
 
 void TaskEncryptResource::EncryptFile(const std::string &fileName)
 {
-    try
-    {
-        LogDebug("Encrypt file: " << fileName);
-        std::string encFile = fileName + ".enc";
-
-        struct stat info;
-        memset(&info, 0, sizeof(info));
-        if (stat(fileName.c_str(), &info) != 0)
-        {
-            int error = errno;
-            ThrowMsg(Exceptions::InternalError,
-                     "Could not access file " << fileName <<
-                     "[" << DPL::GetErrnoString(error) << "]");
-        }
-        const std::size_t fileSize = info.st_size;
-
-        DPL::ScopedFClose inFile(openFile(fileName, "r"));
-        DPL::ScopedFClose outFile(openFile(encFile, "w"));
+    LogDebug("Encrypt file: " << fileName);
+    std::string encFile = fileName + ".enc";
 
-        const std::size_t chunkSize = (fileSize > ENCRYPTION_CHUNK_MAX_SIZE
-                ? ENCRYPTION_CHUNK_MAX_SIZE : fileSize);
-
-        std::unique_ptr<unsigned char[]> inChunk(new unsigned char[chunkSize]);
-        std::unique_ptr<unsigned char[]> outChunk;
-
-        std::size_t bytesRead = 0;
-        using namespace Tizen::Base;
+    struct stat info;
+    memset(&info, 0, sizeof(info));
+    if (stat(fileName.c_str(), &info) != 0)
+    {
+        int error = errno;
+        ThrowMsg(Exceptions::EncryptionFailed,
+                "Could not access file " << fileName <<
+                "[" << DPL::GetErrnoString(error) << "]");
+    }
+    const std::size_t fileSize = info.st_size;
 
-        std::string pkgid =
-            DPL::ToUTF8String(m_context.widgetConfig.tzAppid).c_str();
-        const byte *b_pkgid = reinterpret_cast<const byte*>(
-                    pkgid.c_str());
-        ByteBuffer appInfo;
-        appInfo.Construct(pkgid.length());
-        appInfo.SetArray(b_pkgid, 0, pkgid.length());
-        appInfo.Flip();
+    DPL::ScopedFClose inFile(openFile(fileName, "r"));
+    DPL::ScopedFClose outFile(openFile(encFile, "w"));
 
-        do
-        {
-            bytesRead = readBytes(inChunk.get(), chunkSize, inFile.Get());
-            if (0 != bytesRead) {
-                ByteBuffer *getBuffer = EncryptChunkByTrustZone(
-                        &appInfo,
-                        inChunk.get(), bytesRead);
-                int decBufSize = getBuffer->GetRemaining();
-
-                outChunk.reset(new unsigned char[decBufSize]);
-                memcpy(outChunk.get(), getBuffer->GetPointer(), getBuffer->GetRemaining());
-                getBuffer->Reset();
-
-                char writeSize[ENCRYPTION_DEC_CHUNK_SIZE];
-                memset(writeSize, 0x00, ENCRYPTION_DEC_CHUNK_SIZE);
-                std::stringstream toString;
-                toString << decBufSize;
-                strncpy(writeSize, toString.str().c_str(), toString.str().length());
-
-                writeBytes((unsigned char*)writeSize,
-                        ENCRYPTION_DEC_CHUNK_SIZE, outFile.Get());
-                writeBytes(outChunk.get(), decBufSize, outFile.Get());
-            }
+    const std::size_t chunkSize = (fileSize > ENCRYPTION_CHUNK_MAX_SIZE
+            ? ENCRYPTION_CHUNK_MAX_SIZE : fileSize);
 
-        } while (0 == std::feof(inFile.Get()));
+    std::unique_ptr<unsigned char[]> inChunk(new unsigned char[chunkSize]);
+    std::unique_ptr<unsigned char[]> outChunk;
 
-        outFile.Reset();
-        inFile.Reset();
+    std::size_t bytesRead = 0;
+    using namespace Tizen::Base;
 
-        LogDebug("File encrypted successfully");
-        LogDebug("Remove plain-text file: " << fileName);
-        if (0 != unlink(fileName.c_str()))
-        {
-            Throw(Exceptions::InternalError);
-        }
+    std::string pkgid =
+        DPL::ToUTF8String(m_context.widgetConfig.tzAppid).c_str();
+    const byte *b_pkgid = reinterpret_cast<const byte*>(
+            pkgid.c_str());
+    ByteBuffer appInfo;
+    appInfo.Construct(pkgid.length());
+    appInfo.SetArray(b_pkgid, 0, pkgid.length());
+    appInfo.Flip();
 
-        LogDebug("Rename encrypted file");
-        if (0 != std::rename(encFile.c_str(), fileName.c_str()))
-        {
-            Throw(Exceptions::InternalError);
+    do
+    {
+        bytesRead = readBytes(inChunk.get(), chunkSize, inFile.Get());
+        if (0 != bytesRead) {
+            ByteBuffer *getBuffer = EncryptChunkByTrustZone(
+                    &appInfo,
+                    inChunk.get(), bytesRead);
+            int decBufSize = getBuffer->GetRemaining();
+
+            outChunk.reset(new unsigned char[decBufSize]);
+            memcpy(outChunk.get(), getBuffer->GetPointer(), getBuffer->GetRemaining());
+            getBuffer->Reset();
+
+            char writeSize[ENCRYPTION_DEC_CHUNK_SIZE];
+            memset(writeSize, 0x00, ENCRYPTION_DEC_CHUNK_SIZE);
+            std::stringstream toString;
+            toString << decBufSize;
+            strncpy(writeSize, toString.str().c_str(), toString.str().length());
+
+            writeBytes((unsigned char*)writeSize,
+                    ENCRYPTION_DEC_CHUNK_SIZE, outFile.Get());
+            writeBytes(outChunk.get(), decBufSize, outFile.Get());
         }
 
-        std::string realPath = fileName;
-        realPath.replace(0,
-                         m_context.locations->getTemporaryRootDir().length(),
-                         m_context.locations->getSourceDir());
+    } while (0 == std::feof(inFile.Get()));
 
-        WrtDB::EncryptedFileInfo fileInfo;
-        fileInfo.fileName = DPL::FromUTF8String(realPath);
-        fileInfo.fileSize = fileSize;
+    outFile.Reset();
+    inFile.Reset();
 
-        m_context.widgetConfig.encryptedFiles.insert(fileInfo);
+    LogDebug("File encrypted successfully");
+    LogDebug("Remove plain-text file: " << fileName);
+    if (0 != unlink(fileName.c_str()))
+    {
+        Throw(Exceptions::EncryptionFailed);
     }
-    Catch (Exceptions::InternalError)
+
+    LogDebug("Rename encrypted file");
+    if (0 != std::rename(encFile.c_str(), fileName.c_str()))
     {
-        ReThrowMsg(Exceptions::ExtractFileFailed, fileName);
+        Throw(Exceptions::EncryptionFailed);
     }
+
+    std::string realPath = fileName;
+    realPath.replace(0,
+            m_context.locations->getTemporaryRootDir().length(),
+            m_context.locations->getSourceDir());
+
+    WrtDB::EncryptedFileInfo fileInfo;
+    fileInfo.fileName = DPL::FromUTF8String(realPath);
+    fileInfo.fileSize = fileSize;
+
+    m_context.widgetConfig.encryptedFiles.insert(fileInfo);
 }
 
 } //namespace WidgetInstall