e3305a946c773295f59f47f369744e57650aa36e
[framework/web/wrt-plugins-common.git] / src / CommonsJavaScript / Security / SecurityFunctionDeclaration.h
1 /*
2  * Copyright (c) 2011 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 #ifndef _FUNCTION_DECLARATION_
17 #define _FUNCTION_DECLARATION_
18
19 #include <string>
20 #include <Commons/WrtWrapper/WrtWrappersMgr.h>
21 #include <Commons/Exception.h>
22 #include <JavaScriptCore/JavaScript.h>
23 #include <Commons/TypesDeclaration.h>
24 #include <Commons/TypeTraits.h>
25 #include <dpl/log/log.h>
26
27 namespace WrtDeviceApis {
28 namespace CommonsJavaScript {
29
30 enum class AceSecurityStatus
31 {
32     AccessGranted,
33     AccessDenied,
34     InternalError
35 };
36
37 template <typename ... Args>
38 class DefaultArgsVerifier
39 {
40   public:
41     void operator()(WrtDeviceApis::Commons::AceFunction& aceFunction,
42             Args && ... args) const
43     {
44         static_assert(
45             WrtDeviceApis::Commons::AlwaysFalse<Args ...>::value,
46             "Please provide a specialization for these argument types!");
47     }
48 };
49
50 template <>
51 class DefaultArgsVerifier<>
52 {
53   public:
54     void operator()(WrtDeviceApis::Commons::AceFunction& /*aceFunction*/) const
55     {
56     }
57 };
58
59 template <typename ArgumentsVerifier,
60           typename ... Args>
61 AceSecurityStatus aceCheckAccess2(JSContextRef globalContext,
62         WrtDeviceApis::Commons::AceFunction  aceFunction,
63         Args && ... args)
64 {
65     ArgumentsVerifier argsVerify;
66     argsVerify(aceFunction, args ...);
67
68     Try {
69         WrtDeviceApis::Commons::IWrtWrapperPtr wrapper =
70         WrtDeviceApis::Commons::WrtWrappersMgr::getInstance().getWrtWrapper(
71             globalContext);
72
73         if (!(wrapper->checkAccess(aceFunction))) {
74         LogDebug("Function is not allowed to run");
75         return AceSecurityStatus::AccessDenied;
76         }
77     }
78     Catch(WrtDeviceApis::Commons::OutOfRangeException) {
79         LogError("Wrapper doesn't exist.");
80         return AceSecurityStatus::InternalError;
81     }
82
83     LogDebug("Function accepted!");
84
85     return AceSecurityStatus::AccessGranted;
86 }
87
88
89
90 //The simplest version
91 AceSecurityStatus aceCheckAccessSimple(JSContextRef globalContext,
92         WrtDeviceApis::Commons::AceFunction  aceFunction);
93
94 }
95 }
96
97 #endif // _FUNCTION_DECLARARION_