Cloud Client
[platform/upstream/iotivity.git] / resource / csdk / security / provisioning / include / cloud / occloudprovisioning.h
1 /* *****************************************************************
2  *
3  * Copyright 2016 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * *****************************************************************/
20 #ifndef OC_CLOUD_PROVISIONING_H
21 #define OC_CLOUD_PROVISIONING_H
22
23 #include "octypes.h"
24 #include "securevirtualresourcetypes.h"
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif // __cplusplus
29
30 typedef void (*OCCloudResponseCB )(void* ctx, OCStackResult result, void* data);
31
32 typedef struct cloudAce cloudAce_t;
33
34 struct cloudAce {
35     char *aceId;
36     OicUuid_t subjectuuid;
37     uint16_t stype;
38     uint16_t permission;
39     OicSecRsrc_t *resources;
40     OicSecValidity_t *validities;
41     cloudAce_t *next;
42 };
43
44 typedef struct {
45     char **array;
46     size_t length;
47 }stringArray_t;
48
49 typedef struct {
50     stringArray_t gidlist;
51     stringArray_t midlist;
52 }stringArrayPair_t;
53
54 typedef struct {
55     stringArrayPair_t invite;
56     stringArrayPair_t invited;
57 }inviteResponse_t;
58
59 /**
60  * Certificate-Issue request function
61  *
62  * @param[in] ctx               user-defined context
63  * @param[in] endPoint          cloud host and port
64  * @param[in] callback          result callback
65  * @return  OCStackResult application result
66  */
67 OCStackResult OCCloudCertificateIssueRequest(void* ctx,
68                                              const OCDevAddr *endPoint,
69                                              OCCloudResponseCB callback);
70
71 /**
72  * CRL GET request function
73  *
74  * @param[in] ctx               user-defined context
75  * @param[in] endPoint          cloud host and port
76  * @param[in] callback          result callback
77  * @return  OCStackResult application result
78  */
79 OCStackResult OCCloudGetCRL(void* ctx,
80                             const OCDevAddr *endPoint,
81                             OCCloudResponseCB callback);
82
83 /**
84  * CRL POST request function (with Serial Numbers list to revoke)
85  *
86  * @param[in] ctx               user-defined context
87  * @param[in] thisUpdate        mandatory parameter thisUpdate
88  * @param[in] nextUpdate        mandatory parameter nextUpdate
89  * @param[in] crl               optional parameter crl
90  * @param[in] serialNumbers     optional parameter serial numbers
91  * @param[in] endPoint          cloud host and port
92  * @param[in] callback          result callback
93  * @return  OCStackResult application result
94  */
95 OCStackResult OCCloudPostCRL(void* ctx,
96                              const char *thisUpdate,
97                              const char *nextUpdate,
98                              const OCByteString *crl,
99                              const stringArray_t *serialNumbers,
100                              const OCDevAddr *endPoint,
101                              OCCloudResponseCB callback);
102
103 /**
104  * ACL id retrieve by device id
105  *
106  * @param[in] ctx               user-defined context
107  * @param[in] deviceId          mandatory parameter device id
108  * @param[in] endPoint          cloud host and port
109  * @param[in] callback          result callback
110  * @return  OCStackResult application result
111  */
112 OCStackResult OCCloudAclIdGetByDevice(void* ctx,
113                                       const char *deviceId,
114                                       const OCDevAddr *endPoint,
115                                       OCCloudResponseCB callback);
116
117 /**
118  * ACL id create
119  *
120  * @param[in] ctx               user-defined context
121  * @param[in] ownerId           mandatory parameter owner id
122  * @param[in] deviceId          mandatory parameter device id
123  * @param[in] endPoint          cloud host and port
124  * @param[in] callback          result callback
125  * @return  OCStackResult application result
126  */
127 OCStackResult OCCloudAclIdCreate(void* ctx,
128                                  const char *ownerId,
129                                  const char *deviceId,
130                                  const OCDevAddr *endPoint,
131                                  OCCloudResponseCB callback);
132
133 /**
134  * ACL id delete
135  *
136  * @param[in] ctx               user-defined context
137  * @param[in] aclId             mandatory parameter acl id
138  * @param[in] endPoint          cloud host and port
139  * @param[in] callback          result callback
140  * @return  OCStackResult application result
141  */
142 OCStackResult OCCloudAclIdDelete(void* ctx,
143                                  const char *aclId,
144                                  const OCDevAddr *endPoint,
145                                  OCCloudResponseCB callback);
146
147 /**
148  * ACL individual get info
149  *
150  * @param[in] ctx               user-defined context
151  * @param[in] aclId             mandatory parameter acl id
152  * @param[in] endPoint          cloud host and port
153  * @param[in] callback          result callback
154  * @return  OCStackResult application result
155  */
156 OCStackResult OCCloudAclIndividualGetInfo(void* ctx,
157                                           const char *aclId,
158                                           const OCDevAddr *endPoint,
159                                           OCCloudResponseCB callback);
160
161 /**
162  * ACL individual update ACE
163  *
164  * @param[in] ctx               user-defined context
165  * @param[in] aclId             mandatory parameter acl id
166  * @param[in] aces              mandatory parameter aces
167  * @param[in] endPoint          cloud host and port
168  * @param[in] callback          result callback
169  * @return  OCStackResult application result
170  */
171 OCStackResult OCCloudAclIndividualUpdateAce(void* ctx,
172                                             const char *aclId,
173                                             const cloudAce_t *aces,
174                                             const OCDevAddr *endPoint,
175                                             OCCloudResponseCB callback);
176
177 /**
178  * ACL individual delete
179  *
180  * @param[in] ctx               user-defined context
181  * @param[in] aclId             mandatory parameter acl id
182  * @param[in] endPoint          cloud host and port
183  * @param[in] callback          result callback
184  * @return  OCStackResult application result
185  */
186 OCStackResult OCCloudAclIndividualDelete(void* ctx,
187                                          const char *aclId,
188                                          const OCDevAddr *endPoint,
189                                          OCCloudResponseCB callback);
190
191 /**
192  * ACL post group request function
193  *
194  * @param[in] ctx               user-defined context
195  * @param[in] groupType         mandatory parameter group type
196  * @param[in] groupMasterId     optional parameter group master id
197  * @param[in] endPoint          cloud host and port
198  * @param[in] callback          result callback
199  * @return  OCStackResult application result
200  */
201 OCStackResult OCCloudAclCreateGroup(void* ctx,
202                                     const char *groupType,
203                                     const char *groupMasterId,
204                                     const OCDevAddr *endPoint,
205                                     OCCloudResponseCB callback);
206
207 /**
208  * ACL get group request function
209  *
210  * @param[in] ctx               user-defined context
211  * @param[in] memberId          mandatory parameter member id
212  * @param[in] endPoint          cloud host and port
213  * @param[in] callback          result callback
214  * @return  OCStackResult application result
215  */
216 OCStackResult OCCloudAclFindMyGroup(void* ctx,
217                                     const char *memberId,
218                                     const OCDevAddr *endPoint,
219                                     OCCloudResponseCB callback);
220
221 /**
222  * ACL delete group request function
223  *
224  * @param[in] ctx               user-defined context
225  * @param[in] groupId           mandatory parameter group id
226  * @param[in] groupMasterId     optional parameter group master id
227  * @param[in] endPoint          cloud host and port
228  * @param[in] callback          result callback
229  * @return  OCStackResult application result
230  */
231 OCStackResult OCCloudAclDeleteGroup(void* ctx,
232                                     const char *groupId,
233                                     const char *groupMasterId,
234                                     const OCDevAddr *endPoint,
235                                     OCCloudResponseCB callback);
236
237 /**
238  * ACL join to invited group request function
239  *
240  * @param[in] ctx               user-defined context
241  * @param[in] groupId           mandatory parameter group id
242  * @param[in] endPoint          cloud host and port
243  * @param[in] callback          result callback
244  * @return  OCStackResult application result
245  */
246 OCStackResult OCCloudAclJoinToInvitedGroup(void* ctx,
247                                            const char *groupId,
248                                            const OCDevAddr *endPoint,
249                                            OCCloudResponseCB callback);
250
251 /**
252  * ACL observe group request function
253  *
254  * @param[in] ctx               user-defined context
255  * @param[in] groupId           mandatory parameter group id
256  * @param[in] endPoint          cloud host and port
257  * @param[in] callback          result callback
258  * @return  OCStackResult application result
259  */
260 OCStackResult OCCloudAclObserveGroup(void* ctx,
261                                      const char *groupId,
262                                      const OCDevAddr *endPoint,
263                                      OCCloudResponseCB callback);
264
265 /**
266  * ACL share device into group request function
267  *
268  * @param[in] ctx               user-defined context
269  * @param[in] groupId           mandatory parameter group id
270  * @param[in] memberIds         mandatory parameter members list
271  * @param[in] deviceIds         mandatory parameter devices list
272  * @param[in] endPoint          cloud host and port
273  * @param[in] callback          result callback
274  * @return  OCStackResult application result
275  */
276 OCStackResult OCCloudAclShareDeviceIntoGroup(void* ctx,
277                                              const char *groupId,
278                                              const stringArray_t *memberIds,
279                                              const stringArray_t *deviceIds,
280                                              const OCDevAddr *endPoint,
281                                              OCCloudResponseCB callback);
282
283 /**
284  * ACL delete device from group request function
285  *
286  * @param[in] ctx               user-defined context
287  * @param[in] groupId           mandatory parameter group id
288  * @param[in] memberIds         mandatory parameter members list
289  * @param[in] deviceIds         mandatory parameter devices list
290  * @param[in] endPoint          cloud host and port
291  * @param[in] callback          result callback
292  * @return  OCStackResult application result
293  */
294 OCStackResult OCCloudAclDeleteDeviceFromGroup(void* ctx,
295                                               const char *groupId,
296                                               const stringArray_t *memberIds,
297                                               const stringArray_t *deviceIds,
298                                               const OCDevAddr *endPoint,
299                                               OCCloudResponseCB callback);
300
301 /**
302  * ACL get group info request function
303  *
304  * @param[in] ctx               user-defined context
305  * @param[in] groupId           mandatory parameter group id
306  * @param[in] memberId          optional parameter member id
307  * @param[in] endPoint          cloud host and port
308  * @param[in] callback          result callback
309  * @return  OCStackResult application result
310  */
311 OCStackResult OCCloudAclGroupGetInfo(void* ctx,
312                                      const char *groupId,
313                                      const char *memberId,
314                                      const OCDevAddr *endPoint,
315                                      OCCloudResponseCB callback);
316
317 /**
318  * ACL invite user to group request function
319  *
320  * @param[in] ctx               user-defined context
321  * @param[in] userId            optional parameter user id
322  * @param[in] groupIds          mandatory parameter groups list
323  * @param[in] memberIds         mandatory parameter members list
324  * @param[in] endPoint          cloud host and port
325  * @param[in] callback          result callback
326  * @return  OCStackResult application result
327  */
328 OCStackResult OCCloudAclInviteUser(void* ctx,
329                                    const char *userId,
330                                    const stringArray_t *groupIds,
331                                    const stringArray_t *memberIds,
332                                    const OCDevAddr *endPoint,
333                                    OCCloudResponseCB callback);
334
335 /**
336  * ACL get invitation request function
337  *
338  * @param[in] ctx               user-defined context
339  * @param[in] userId            optional parameter user id
340  * @param[in] endPoint          cloud host and port
341  * @param[in] callback          result callback
342  * @return  OCStackResult application result
343  */
344 OCStackResult OCCloudAclGetInvitation(void* ctx,
345                                       const char *userId,
346                                       const OCDevAddr *endPoint,
347                                       OCCloudResponseCB callback);
348
349 /**
350  * ACL delete invitation request function (by receiver)
351  *
352  * @param[in] ctx               user-defined context
353  * @param[in] userId            optional parameter user id
354  * @param[in] groupId           mandatory parameter group id
355  * @param[in] endPoint          cloud host and port
356  * @param[in] callback          result callback
357  * @return  OCStackResult application result
358  */
359 OCStackResult OCCloudAclDeleteInvitation(void* ctx,
360                                          const char *userId,
361                                          const char *groupId,
362                                          const OCDevAddr *endPoint,
363                                          OCCloudResponseCB callback);
364
365 /**
366  * ACL cancel invitation request function (by sender)
367  *
368  * @param[in] ctx               user-defined context
369  * @param[in] userId            optional parameter user id
370  * @param[in] groupId           mandatory parameter group id
371  * @param[in] memberId          mandatory parameter member id
372  * @param[in] endPoint          cloud host and port
373  * @param[in] callback          result callback
374  * @return  OCStackResult application result
375  */
376 OCStackResult OCCloudAclCancelInvitation(void* ctx,
377                                          const char *userId,
378                                          const char *groupId,
379                                          const char *memberId,
380                                          const OCDevAddr *endPoint,
381                                          OCCloudResponseCB callback);
382
383 /**
384  * ACL check that given request can be applied to resource
385  *
386  * @param[in] ctx               user-defined context
387  * @param[in] subjectId         mandatory parameter subject id
388  * @param[in] deviceId          mandatory parameter device id
389  * @param[in] method            mandatory parameter method
390  * @param[in] uri               mandatory parameter uri
391  * @param[in] endPoint          cloud host and port
392  * @param[in] callback          result callback
393  * @return  OCStackResult application result
394  */
395 OCStackResult OCCloudAclPolicyCheck(void* ctx,
396                                     const char *subjectId,
397                                     const char *deviceId,
398                                     const char *method,
399                                     const char *uri,
400                                     const OCDevAddr *endPoint,
401                                     OCCloudResponseCB callback);
402
403 #ifdef __cplusplus
404 }
405 #endif // __cplusplus
406 #endif //OC_CLOUD_PROVISIONING_H