[IOT-3284] IoTivity does not delete cloud account
[iotivity.git] / resource / csdk / security / provisioning / include / cloud / auth.h
1 /* *****************************************************************
2  *
3  * Copyright 2018 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 CLOUD_AUTH_H
21 #define CLOUD_AUTH_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 #include "octhread.h"
28
29 /**
30  * Cloud status/error
31  */
32 typedef enum
33 {
34     OC_CLOUD_OK = 0,
35     OC_CLOUD_PROV = 1,
36     OC_CLOUD_SIGNUP = 2,
37     OC_CLOUD_SIGNIN = 3,
38     OC_CLOUD_SIGNOUT = 4,
39     OC_CLOUD_TOKEN_REFRESH0 = 5,
40     OC_CLOUD_TOKEN_REFRESH1 = 6,
41     OC_CLOUD_TOKEN_REFRESH2 = 7,
42     OC_CLOUD_TOKEN_REFRESH3 = 8,
43     OC_CLOUD_TOKEN_REFRESH4 = 9,
44     /* Error codes */
45     OC_CLOUD_ERROR_REFRESHTOKEN = 244,
46     OC_CLOUD_ERROR_REDIRECT = 245,
47     OC_CLOUD_ERROR_TLS = 246,
48     OC_CLOUD_ERROR_INVALID_ACCESS_TOKEN = 247,
49     OC_CLOUD_ERROR_UNREACHABLE = 248,
50     OC_CLOUD_ERROR_SIGNOUT = 249,
51     OC_CLOUD_ERROR_SIGNIN = 250,
52     OC_CLOUD_ERROR_CREATE_SESSION = 251,
53     OC_CLOUD_ERROR_CHECK_SESSION = 252,
54     OC_CLOUD_ERROR_SIGNUP = 253,
55     OC_CLOUD_ERROR = 254,
56     OC_CLOUD_EXIT = 255
57 } CloudStatus;
58
59 typedef struct
60 {
61     char        *authProvider;
62     char        *accessToken;
63     char        *refreshToken;
64     long        expireSin;
65     char        *uid;
66 } session_t;
67
68 typedef struct OicCloud OicCloud_t;
69
70 /**
71  * /oic/cloudconf
72  * Data used by the device to connect to the OCF Cloud.
73  */
74 struct OicCloud
75 {
76     char        *apn;   // Authorization Provider Name
77     char        *cis;   // OCF Cloud URL
78     char        *at;    // Access Token
79     char        *sid;   // Cloud UUID
80 #if !defined(__MANDATORY__)
81     char        *redirectUri;
82 #endif // __MANDATORY__
83     CloudStatus stat;
84     char        *accessToken; //sign in access token
85     oc_thread   pid;
86     session_t   *session;
87     OicCloud_t  *next;
88     bool        delete_after_signout;
89 };
90
91 #define OIC_JSON_CLOUDS_NAME    "clouds"
92 #define OIC_JSON_CLOUD_APN      "apn"
93 #define OIC_JSON_CLOUD_CIS      "cis"
94 #define OIC_JSON_CLOUD_AT       "at"
95 #define OIC_JSON_CLOUD_SID      "sid"
96 #define OIC_JSON_CLOUD_CLEC     "clec"
97
98 /**
99  * Sends Sign UP request to cloud
100  *
101  * @param[in] cloud
102  * @return ::OC_STACK_OK on success,  error indication otherwise
103  */
104 OCStackResult OCCloudSignUp(OicCloud_t *cloud);
105
106 /**
107  * Sends Sign IN request to cloud
108  *
109  * @param[in] cloud  cloud pointer
110  * @return ::OC_STACK_OK on success,  error indication otherwise
111  */
112 OCStackResult OCCloudSignIn(OicCloud_t *cloud);
113
114 /**
115  * Sends Sign OUT request to cloud
116  *
117  * @param[in] cloud  cloud pointer
118  * @return ::OC_STACK_OK on success,  error indication otherwise
119  */
120 OCStackResult OCCloudSignOut(OicCloud_t *cloud);
121
122 /**
123  * Session free function
124  *
125  * @param[in] cloud   cloud pointer
126  * @return  pointer to next cloud entry
127  */
128 OicCloud_t *FreeCloud(OicCloud_t *cloud);
129
130 /**
131  * Stop update session
132  * @param[in] cloud
133  */
134 void StopCloudRefresh(OicCloud_t *cloud);
135
136 /**
137  * Cloud to CBOR
138  *
139  * @param[in] clouds  cloud list to convert
140  * @param[out] payload  generated CBOR payload
141  * @param[out] size  size of generated CBOR payload
142  * @return ::OC_STACK_OK on success,  error indication otherwise
143  */
144 OCStackResult CloudToCBORPayload(const OicCloud_t *clouds, uint8_t **payload, size_t *size);
145
146 /**
147  * Convert Cloud to CBOR for resource
148  *
149  * @param[in] clouds  cloud list to convert
150  * @param[out] payload  generated CBOR payload
151  * @param[out] size  size of generated CBOR payload
152  * @return ::OC_STACK_OK on success,  error indication otherwise
153  */
154 OCStackResult CloudToCBORPayloadResource(const OicCloud_t *clouds, uint8_t **payload, size_t *size);
155
156 /**
157  * Convert CBOR to Cloud
158  *
159  * @param[in] cborPayload  payload to convert
160  * @param[in] size  size of payload
161  * @param[out] clouds  cloud list to generate
162  * @return ::OC_STACK_OK on success,  error indication otherwise
163  */
164 OCStackResult CBORPayloadToCloud(const uint8_t *cborPayload, size_t size, OicCloud_t **clouds);
165
166 /**
167  * Cloud find
168  * Find if cloud is present in list
169  *
170  * @param[in] list  cloud list
171  * @param[in] cloud cloud to find
172  * @return  clout, or NULL if not found
173  */
174 OicCloud_t *CloudFind(OicCloud_t *list, const OicCloud_t *cloud);
175
176 /**
177  * Format the status of a cloud into a string
178  *
179  * @param[in] cloud cloud pointer
180  * @return string indicating status
181  */
182 const char *GetCloudStatus(const OicCloud_t *cloud);
183
184 /**
185  * Cloud validate
186  *
187  * @param[in] cloud
188  * @return bool true - Ok
189  */
190 bool ValidCloud(OicCloud_t *cloud);
191
192 /**
193  * Cloud delete
194  *
195  * @param[in] cloud
196  * @return  OCStackResult application result
197  */
198 OCStackResult OCCloudDelete(OicCloud_t *cloud);
199
200 /**
201  * Cloud copy
202  *
203  * @param[in] src cloud source
204  * @param[in] dst cloud destination
205  * @return bool true - Ok
206  */
207 bool CloudCopy(const OicCloud_t *src, OicCloud_t *dst);
208
209 #ifdef __cplusplus
210 }
211 #endif
212
213 #endif // CLOUD_AUTH_H