Merging tizen into ckm. Stage 1.
[platform/core/test/security-tests.git] / src / cynara-tests / plugins / test-agent / plugin.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  *        http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 /**
17  * @file        plugin.cpp
18  * @author      Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
19  * @brief       Implementation of cynara test plugin handling communication with test-agent
20  */
21
22 #include <new>
23
24 #include <cynara-plugin.h>
25 #include <BaseCynaraTestPlugin.h>
26 #include <plugins.h>
27
28 class TestAgentPlugin : public BaseCynaraTestPlugin
29 {
30 public:
31     TestAgentPlugin() : BaseCynaraTestPlugin(CynaraTestPlugins::TEST_AGENT) {}
32     virtual ~TestAgentPlugin() {}
33
34     virtual Cynara::ServicePluginInterface::PluginStatus check(const std::string &client,
35                                                                const std::string &user,
36                                                                const std::string &privilege,
37                                                                Cynara::PolicyResult &result,
38                                                                Cynara::AgentType &requiredAgent,
39                                                                Cynara::PluginData &pluginData)
40                                                                noexcept
41     {
42         (void) result;
43
44         try {
45             requiredAgent = CynaraTestPlugins::TEST_AGENT_TYPE;
46             pluginData = CynaraTestPlugins::wrapAgentData({client, user, privilege});
47         } catch (...) {
48             return Cynara::ServicePluginInterface::PluginStatus::ERROR;
49         }
50         return Cynara::ServicePluginInterface::PluginStatus::ANSWER_NOTREADY;
51     }
52
53     virtual Cynara::ServicePluginInterface::PluginStatus update(const std::string &client,
54                                                                 const std::string &user,
55                                                                 const std::string &privilege,
56                                                                 const Cynara::PluginData &agentData,
57                                                                 Cynara::PolicyResult &result)
58                                                                 noexcept
59     {
60         (void) client;
61         (void) user;
62         (void) privilege;
63
64         try {
65             CynaraTestPlugins::AgentDataVector data;
66             if (!CynaraTestPlugins::unwrapAgentData(agentData, data))
67                 return Cynara::ServicePluginInterface::PluginStatus::ERROR;
68
69             if (data.size() != 1)
70                 return Cynara::ServicePluginInterface::PluginStatus::ERROR;
71
72             if (data[0] == CynaraTestPlugins::AGENT_DATA_ALLOW) {
73                     result = Cynara::PolicyResult(Cynara::PredefinedPolicyType::ALLOW);
74                     return Cynara::ServicePluginInterface::PluginStatus::SUCCESS;
75             }
76             else if (data[0] == CynaraTestPlugins::AGENT_DATA_DENY) {
77                     result = Cynara::PolicyResult(Cynara::PredefinedPolicyType::DENY);
78                     return Cynara::ServicePluginInterface::PluginStatus::SUCCESS;
79             }
80         } catch (...) {
81             return Cynara::ServicePluginInterface::PluginStatus::ERROR;
82         }
83         return Cynara::ServicePluginInterface::PluginStatus::ERROR;
84     }
85 };
86
87 extern "C" {
88 Cynara::ExternalPluginInterface *create(void) {
89     return new TestAgentPlugin();
90 }
91
92 void destroy(Cynara::ExternalPluginInterface *ptr) {
93     delete ptr;
94 }
95 } // extern "C"