7b60c62ae9be696de01a6fe134747b1b57ad6669
[platform/core/appfw/rpc-port.git] / src / ac-internal.hh
1 /*
2  * Copyright (c) 2017 - 2021 Samsung Electronics Co., Ltd.
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 #ifndef AC_INTERNAL_HH_
18 #define AC_INTERNAL_HH_
19
20 #include <cynara-client.h>
21 #include <gio/gio.h>
22 #include <glib-unix.h>
23 #include <glib.h>
24
25 #include <map>
26 #include <memory>
27 #include <string>
28 #include <vector>
29
30 namespace rpc_port {
31 namespace internal {
32
33 class AccessController {
34  public:
35   explicit AccessController(bool trusted = false) : trusted_(trusted) {}
36
37   void AddPrivilege(std::string privilege);
38   void SetTrusted(const bool trusted);
39   int Check(int fd, const std::string& sender_appid);
40
41  private:
42   class Cynara {
43    public:
44     Cynara();
45     ~Cynara();
46
47     int FetchCredsFromSocket(int fd);
48     int Check(const std::string& privilege) const;
49
50    private:
51     std::unique_ptr<cynara, decltype(cynara_finish)*> cynara_;
52     std::unique_ptr<char, decltype(std::free)*> client_;
53     std::unique_ptr<char, decltype(std::free)*> user_;
54   };
55
56   int CheckTrusted(const std::string& sender_appid);
57   int CheckPrivilege(const Cynara& c);
58
59  private:
60   std::vector<std::string> privileges_;
61   std::map<std::string, bool> cache_;
62   bool trusted_;
63   std::string appid_;
64 };
65
66 }  // namespace internal
67 }  // namespace rpc_port
68
69 #endif  // AC_INTERNAL_HH_