f7e9c78b852877da79abd672c02d3e73a0faf581
[platform/core/security/cynara.git] / src / service / storage / Storage.h
1 /*
2  * Copyright (c) 2014 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        Storage.h
18  * @author      Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
19  * @author      Aleksander Zdyb <a.zdyb@partner.samsung.com>
20  * @version     1.0
21  * @brief       This file is the implementation file of log system
22  */
23
24 #ifndef CYNARA_SERVICE_STORAGE_STORAGE_H
25 #define CYNARA_SERVICE_STORAGE_STORAGE_H
26
27 #include <map>
28 #include <memory>
29 #include <tuple>
30 #include <vector>
31
32 #include "types/pointers.h"
33 #include "types/PolicyBucketId.h"
34 #include "types/PolicyResult.h"
35 #include "types/PolicyKey.h"
36
37 namespace Cynara {
38
39 class StorageBackend;
40 class PolicyBucket;
41
42 class Storage
43 {
44 public:
45     // TODO: These tuples are ugly -- refactorize
46 //todo to be removed, after tests get updated
47     typedef std::tuple<PolicyPtr, PolicyBucketId> PolicyPolicyBucket;
48     typedef std::tuple<PolicyKey, PolicyBucketId> PolicyKeyBucket;
49
50     Storage(StorageBackend &backend) : m_backend(backend) {}
51
52     PolicyResult checkPolicy(const PolicyKey &key);
53
54 //todo below to functions should be removed, after tests get updated
55     void insertPolicies(const std::vector<PolicyPolicyBucket> &policies);
56     void deletePolicies(const std::vector<PolicyKeyBucket> &policies);
57
58     void insertPolicies(const std::map<PolicyBucketId, std::vector<Policy>> &policies);
59     void deletePolicies(const std::map<PolicyBucketId, std::vector<PolicyKey>> &policies);
60
61     void addOrUpdateBucket(const PolicyBucketId &bucketId, const PolicyResult &defaultBucketPolicy);
62     void deleteBucket(const PolicyBucketId &bucketId);
63
64 protected:
65     PolicyResult minimalPolicy(const PolicyBucket &bucket, const PolicyKey &key);
66
67 private:
68     StorageBackend &m_backend; // backend strategy
69 };
70
71 } // namespace Cynara
72
73 #endif /* CYNARA_SERVICE_STORAGE_STORAGE_H */