+
+ // Out of SessionNone every call get a client context session
+ if (AFB_SESSION_NONE != plugin->apis[idx].session) {
+
+ // add client context to request
+ ctxClientGet(request, plugin);
+
+ if (verbose) fprintf(stderr, "Plugin=[%s] Api=[%s] Middleware=[%d] Client=[0x%x] Uuid=[%s] Token=[%s]\n"
+ , request->plugin, request->api, plugin->apis[idx].session, request->client, request->client->uuid, request->client->token);
+
+ switch(plugin->apis[idx].session) {
+
+ case AFB_SESSION_CREATE:
+ if (request->client->token[0] != '\0') {
+ request->errcode=MHD_HTTP_UNAUTHORIZED;
+ json_object_object_add(jcall, "status", json_object_new_string ("exist"));
+ json_object_object_add(jcall, "info", json_object_new_string ("AFB_SESSION_CREATE Session already exist"));
+ json_object_object_add(request->jresp, "request", jcall);
+ return (AFB_DONE);
+ }
+
+ if (AFB_SUCCESS != ctxTokenCreate (request)) {
+ request->errcode=MHD_HTTP_UNAUTHORIZED;
+ json_object_object_add(jcall, "status", json_object_new_string ("fail"));
+ json_object_object_add(jcall, "info", json_object_new_string ("AFB_SESSION_CREATE Invalid Initial Token"));
+ json_object_object_add(request->jresp, "request", jcall);
+ return (AFB_DONE);
+ } else {
+ json_object_object_add(jcall, "uuid", json_object_new_string (request->client->uuid));
+ json_object_object_add(jcall, "token", json_object_new_string (request->client->token));
+ json_object_object_add(jcall, "timeout", json_object_new_int (request->config->cntxTimeout));
+ }
+ break;
+
+
+ case AFB_SESSION_RENEW:
+ if (AFB_SUCCESS != ctxTokenRefresh (request)) {
+ request->errcode=MHD_HTTP_UNAUTHORIZED;
+ json_object_object_add(jcall, "status", json_object_new_string ("fail"));
+ json_object_object_add(jcall, "info", json_object_new_string ("AFB_SESSION_REFRESH Broken Exchange Token Chain"));
+ json_object_object_add(request->jresp, "request", jcall);
+ return (AFB_DONE);
+ } else {
+ json_object_object_add(jcall, "uuid", json_object_new_string (request->client->uuid));
+ json_object_object_add(jcall, "token", json_object_new_string (request->client->token));
+ json_object_object_add(jcall, "timeout", json_object_new_int (request->config->cntxTimeout));
+ }
+ break;
+
+ case AFB_SESSION_CLOSE:
+ if (AFB_SUCCESS != ctxTokenCheck (request)) {
+ request->errcode=MHD_HTTP_UNAUTHORIZED;
+ json_object_object_add(jcall, "status", json_object_new_string ("empty"));
+ json_object_object_add(jcall, "info", json_object_new_string ("AFB_SESSION_CLOSE Not a Valid Access Token"));
+ json_object_object_add(request->jresp, "request", jcall);
+ return (AFB_DONE);
+ } else {
+ json_object_object_add(jcall, "uuid", json_object_new_string (request->client->uuid));
+ }
+ break;
+
+ case AFB_SESSION_CHECK:
+ default:
+ // default action is check
+ if (AFB_SUCCESS != ctxTokenCheck (request)) {
+ request->errcode=MHD_HTTP_UNAUTHORIZED;
+ json_object_object_add(jcall, "status", json_object_new_string ("fail"));
+ json_object_object_add(jcall, "info", json_object_new_string ("AFB_SESSION_CHECK Invalid Active Token"));
+ json_object_object_add(request->jresp, "request", jcall);
+ return (AFB_DONE);
+ }
+ break;
+ }
+ }