6c105f7df8783fe86322fc5be6fdf7dcd3b6db9f
[platform/core/appfw/pkgmgr-info.git] / src / server / request_handler / set_cert_request_handler.cc
1 // Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
4
5 #include "set_cert_request_handler.hh"
6
7 #include <string>
8
9 #include "certinfo_parcelable.hh"
10 #include "cert_set_db_handler.hh"
11 #include "utils/logging.hh"
12 #include "parcelable_factory.hh"
13
14 #include "pkgmgrinfo_debug.h"
15
16 namespace pcp = pkgmgr_common::parcel;
17 namespace psd = pkgmgr_server::database;
18
19 namespace pkgmgr_server {
20 namespace request_handler {
21
22 bool SetCertRequestHandler::HandleRequest(unsigned char* data, int size,
23                                           const std::string& locale) {
24   auto abstract_parcel =
25       pcp::ParcelableFactory::GetInst().CreateParcel(data, size);
26
27   if (abstract_parcel == nullptr ||
28       abstract_parcel->GetType() != pcp::ParcelableType::CertInfo) {
29     LOG(ERROR) << "Invalid parcel";
30     result_ = std::make_shared<pcp::ResultParcelable>(
31         PMINFO_R_ERROR, std::vector<pcp::StrArgs>{});
32     return false;
33   }
34
35   auto* parcel = dynamic_cast<pcp::CertInfoParcelable*>(abstract_parcel.get());
36   if (parcel == nullptr) {
37     LOG(ERROR) << "Parcel is empty";
38     result_ = std::make_shared<pcp::ResultParcelable>(
39         PMINFO_R_ERROR, std::vector<pcp::StrArgs>{});
40     return false;
41   }
42
43   psd::CertSetDBHandler db(parcel->GetUid(), GetPID(), is_offline_);
44   db.SetLocale(locale);
45   db.SetCertHandle(const_cast<pkgmgr_certinfo_x*>(parcel->GetCertInfo()));
46
47   int ret = db.Execute();
48   result_ = std::make_shared<pcp::ResultParcelable>(
49       ret, std::vector<pcp::StrArgs>{});
50
51   return true;
52 }
53
54 std::vector<uint8_t> SetCertRequestHandler::ExtractResult() {
55   tizen_base::Parcel parcel;
56
57   parcel.WriteParcelable(*result_);
58   std::vector<uint8_t> raw = parcel.GetRaw();
59
60   result_.reset();
61
62   return raw;
63 }
64
65 }  // namespace request_handler
66 }  // namespace pkgmgr_server