ba6d276141bae33667781d5216ef437c5a8fc782
[src/app-framework-binder.git] / plugins / session / token-api.c
1 /*
2  * Copyright (C) 2015 "IoT.bzh"
3  * Author "Fulup Ar Foll"
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 3 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19
20 #include "local-def.h"
21
22 // Dummy sample of Client Application Context
23 typedef struct {
24   int  something;       
25   void *whateveryouwant;
26 } MyClientApplicationHandle;
27
28
29 // Request Creation of new context if it does not exist
30 STATIC json_object* clientContextCreate (AFB_request *request) {
31     json_object *jresp;
32
33     // add an application specific client context to session
34     request->client->ctx = malloc (sizeof (MyClientApplicationHandle));
35     
36     // Send response to UI
37     jresp = json_object_new_object();               
38     json_object_object_add(jresp, "token", json_object_new_string ("A New Token and Session Context Was Created"));
39
40     return (jresp);
41 }
42
43 // Before entering here token will be check and renew
44 STATIC json_object* clientContextRefresh (AFB_request *request) {
45     json_object *jresp;
46
47   
48     jresp = json_object_new_object();
49     json_object_object_add(jresp, "token", json_object_new_string ("Token was refreshed"));              
50     
51     return (jresp);
52 }
53
54
55 // Session token will we verified before entering here
56 STATIC json_object* clientContextCheck (AFB_request *request) {
57     
58     json_object *jresp = json_object_new_object();    
59     json_object_object_add(jresp, "isvalid", json_object_new_boolean (TRUE));       
60         
61     return (jresp); 
62 }
63
64
65 // Close and Free context
66 STATIC json_object* clientContextReset (AFB_request *request) {
67     json_object *jresp;
68    
69     jresp = json_object_new_object();
70     json_object_object_add(jresp, "uuid", json_object_new_string (request->client->uuid));              
71     
72     return (jresp); 
73 }
74
75 // In this case or handle is quite basic
76 typedef struct {
77    int fd; 
78 } appPostCtx;
79
80
81 // This function is call when Client Session Context is removed
82 // Note: when freeCtxCB==NULL standard free/malloc is called
83 STATIC void clientContextFree(AFB_clientCtx *client) {
84     fprintf (stderr,"Plugin[%s] Closing Session uuid=[%s]\n", client->plugin->prefix, client->uuid);
85     free (client->ctx);
86 }
87
88 STATIC  AFB_restapi pluginApis[]= {
89   {"ping"    , AFB_SESSION_NONE  , (AFB_apiCB)apiPingTest         ,"Ping Rest Test Service"},
90   {"create"  , AFB_SESSION_CREATE, (AFB_apiCB)clientContextCreate ,"Request Client Context Creation"},
91   {"refresh" , AFB_SESSION_RENEW , (AFB_apiCB)clientContextRefresh,"Refresh Client Context Token"},
92   {"check"   , AFB_SESSION_CHECK , (AFB_apiCB)clientContextCheck  ,"Check Client Context Token"},
93   {"reset"   , AFB_SESSION_CLOSE , (AFB_apiCB)clientContextReset  ,"Close Client Context and Free resources"},
94   {NULL}
95 };
96
97 PUBLIC AFB_plugin *pluginRegister () {
98     AFB_plugin *plugin = malloc (sizeof (AFB_plugin));
99     plugin->type  = AFB_PLUGIN_JSON; 
100     plugin->info  = "Application Framework Binder Service";
101     plugin->prefix= "token";  // url base
102     plugin->apis  = pluginApis;
103     plugin->handle= (void*) "What ever you want";
104     plugin->freeCtxCB= (void*) clientContextFree;
105     
106     return (plugin);
107 };