api-v3: First draft
[src/app-framework-binder.git] / include / afb / afb-auth.h
1 /*
2  * Copyright (C) 2016, 2017, 2018 "IoT.bzh"
3  * Author: José Bollo <jose.bollo@iot.bzh>
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *   http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17
18 #pragma once
19
20 /**
21  * Enumeration  for authority (Session/Token/Assurance) definitions.
22  *
23  * @see afb_auth
24  */
25 enum afb_auth_type
26 {
27         /** never authorized, no data */
28         afb_auth_No = 0,
29
30         /** authorized if token valid, no data */
31         afb_auth_Token,
32
33         /** authorized if LOA greater than data 'loa' */
34         afb_auth_LOA,
35
36         /** authorized if permission 'text' is granted */
37         afb_auth_Permission,
38
39         /** authorized if 'first' or 'next' is authorized */
40         afb_auth_Or,
41
42         /** authorized if 'first' and 'next' are authorized */
43         afb_auth_And,
44
45         /** authorized if 'first' is not authorized */
46         afb_auth_Not,
47
48         /** always authorized, no data */
49         afb_auth_Yes
50 };
51
52 /**
53  * Definition of an authorization entry
54  */
55 struct afb_auth
56 {
57         /** type of entry @see afb_auth_type */
58         enum afb_auth_type type;
59         
60         union {
61                 /** text when @ref type == @ref afb_auth_Permission */
62                 const char *text;
63                 
64                 /** level of assurancy when @ref type ==  @ref afb_auth_LOA */
65                 unsigned loa;
66                 
67                 /** first child when @ref type in { @ref afb_auth_Or, @ref afb_auth_And, @ref afb_auth_Not } */
68                 const struct afb_auth *first;
69         };
70         
71         /** second child when @ref type in { @ref afb_auth_Or, @ref afb_auth_And } */
72         const struct afb_auth *next;
73 };
74