2 * Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
17 * @file InitialValueHandler.cpp
18 * @author Maciej Karpiuk (m.karpiuk2@samsung.com)
20 * @brief InitialValueHandler class implementation.
27 #include <InitialValueHandler.h>
28 #include <EncodingType.h>
29 #include <ckm/ckm-type.h>
33 const char * const XML_ATTR_NAME = "name";
34 const char * const XML_ATTR_PASSWORD = "password";
35 const char * const XML_ATTR_EXPORTABLE = "exportable";
39 namespace InitialValues {
41 void InitialValueHandler::Start(const XML::Parser::Attributes &attr)
44 if(attr.find(XML_ATTR_NAME) != attr.end())
45 m_name = Alias(attr.at(XML_ATTR_NAME));
48 if(attr.find(XML_ATTR_PASSWORD) != attr.end())
49 m_password = Password(attr.at(XML_ATTR_PASSWORD).c_str());
52 if(attr.find(XML_ATTR_EXPORTABLE) != attr.end())
54 std::string flagVal = attr.at(XML_ATTR_EXPORTABLE);
55 std::transform(flagVal.begin(), flagVal.end(), flagVal.begin(), ::tolower);
56 std::istringstream is(flagVal);
57 is >> std::boolalpha >> m_exportable;
61 void InitialValueHandler::Characters(const std::string &)
63 throw std::runtime_error("error: value handler detected raw data outside data-specific tag");
66 void InitialValueHandler::End()
71 Policy policy(m_password, m_exportable);
72 int ec = m_db_logic.verifyAndSaveDataHelper(
73 Credentials(CKMLogic::SYSTEM_DB_UID, LABEL_SYSTEM_DB),
76 m_bufferHandler->getData(),
78 PolicySerializable(policy));
79 if(CKM_API_SUCCESS == ec)
82 for(const auto & permission : m_permissions)
84 ec = m_db_logic.setPermissionHelper(
85 Credentials(CKMLogic::SYSTEM_DB_UID, LABEL_SYSTEM_DB),
88 permission->getAccessor(),
90 if(CKM_API_SUCCESS != ec)
91 LogError("Saving permission to: " << m_name << " with params: accessor("<<permission->getAccessor()<<") failed, code: " << ec);
95 LogError("Saving type: " << getDataType() << " with params: name("<<m_name<<"), exportable("<<m_exportable<<") failed, code: " << ec);
98 LogError("Invalid data with name: " << m_name << ", reason: no key data!");
101 BufferHandler::BufferHandlerPtr InitialValueHandler::CreateBufferHandler(EncodingType type)
103 m_bufferHandler = std::make_shared<BufferHandler>(type);
104 return m_bufferHandler;
107 PermissionHandler::PermissionHandlerPtr InitialValueHandler::CreatePermissionHandler()
109 PermissionHandler::PermissionHandlerPtr newPermission = std::make_shared<PermissionHandler>();
110 m_permissions.push_back(newPermission);
111 return newPermission;