+ // request a new client context token and check result
+ ctxTokenCreate (request);
+
+ // add a client handle to session
+ client->handle = malloc (sizeof (MyClientApplicationHandle));
+
+ // Send response to UI
+ jresp = json_object_new_object();
+ json_object_object_add(jresp, "token", json_object_new_string (client->token));
+
+ return (jresp);
+}
+
+// Renew an existing context
+PUBLIC json_object* clientContextRefresh (AFB_request *request) {
+ json_object *jresp;
+
+ // check we do not already have a session
+ if (request->client == NULL) return (jsonNewMessage(AFB_FAIL, "No Previous Token use Create"));
+
+ // note: we do not need to parse the old token as clientContextRefresh doit for us
+ if (ctxTokenRefresh (request)) {
+ jresp = json_object_new_object();
+ json_object_object_add(jresp, "token", json_object_new_string (request->client->token));
+ } else {
+ request->errcode=MHD_HTTP_UNAUTHORIZED;
+ jresp= jsonNewMessage(AFB_FAIL, "Token Exchange Broken Refresh Refused");
+ }
+
+ return (jresp);
+}
+
+
+// Verify a context is still valid
+PUBLIC json_object* clientContextCheck (AFB_request *request) {
+ json_object *jresp;
+ int isvalid;
+
+ // check is token is valid
+ isvalid= ctxTokenCheck (request);
+
+ // add an error code to respond
+ if (!isvalid) request->errcode=MHD_HTTP_UNAUTHORIZED;
+
+ // prepare response for client side application
+ jresp = json_object_new_object();
+ json_object_object_add(jresp, "isvalid", json_object_new_boolean (isvalid));
+
+ return (jresp);
+}
+
+// Close and Free context
+PUBLIC json_object* clientContextReset (AFB_request *request) {
+ json_object *jresp;
+
+ jresp = json_object_new_object();
+ json_object_object_add(jresp, "done", json_object_new_boolean (ctxTokenReset (request)));