aboutsummaryrefslogtreecommitdiffstats
path: root/src/afb-monitor.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2018-02-15 17:17:37 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2018-02-15 17:23:33 +0100
commitfb444de0bcb53917086c724444d7f8df25e8e806 (patch)
tree47c265199c7a841e4042d89dd54039af39dd5e28 /src/afb-monitor.c
parent66df82496e8b5cf0e49e8fe4ddd57827bbd0e3c5 (diff)
afb-monitor: Add session and rework permissions
The new verb session is available to get session info and to renew the token. See examples below. The permission required is now just to being check meaning having the token. Example: afb-client-demo -H localhost:5555/api?token=456 monitor session ON-REPLY 1:monitor/session: OK { "response":{ "uuid":"5a30c118-319c-43a2-82d5-fc2198d01938", "token":"", "timeout":32000000, "remain":31999985 }, "jtype":"afb-reply", "request":{ "status":"success", "uuid":"5a30c118-319c-43a2-82d5-fc2198d01938" } } monitor session {"refresh-token":true} ON-REPLY 5:monitor/session: OK { "response":{ "uuid":"5a30c118-319c-43a2-82d5-fc2198d01938", "token":"2f60faf8-ad04-457e-9f56-5c0c20b5f1fc", "timeout":32000000, "remain":32000000 }, "jtype":"afb-reply", "request":{ "status":"success", "token":"2f60faf8-ad04-457e-9f56-5c0c20b5f1fc" } } Change-Id: Ic93bae80616e5dad1640e73ac9f472b7b385104f Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-monitor.c')
-rw-r--r--src/afb-monitor.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/afb-monitor.c b/src/afb-monitor.c
index e34b5989..8876f4c6 100644
--- a/src/afb-monitor.c
+++ b/src/afb-monitor.c
@@ -30,6 +30,7 @@
#include "afb-evt.h"
#include "afb-xreq.h"
#include "afb-trace.h"
+#include "afb-session.h"
#include "verbose.h"
#include "wrap-json.h"
@@ -295,6 +296,7 @@ static struct json_object *get_apis(struct json_object *spec)
static const char _verbosity_[] = "verbosity";
static const char _apis_[] = "apis";
+static const char _refresh_token_[] = "refresh-token";
static void f_get(struct afb_req req)
{
@@ -359,3 +361,30 @@ end:
afb_evt_update_hooks();
}
+static void f_session(struct afb_req req)
+{
+ struct json_object *r = NULL;
+ int refresh = 0;
+ struct afb_xreq *xreq = xreq_from_request(req.closure);
+
+ /* check right to call it */
+ if (xreq->context.super) {
+ afb_req_fail(req, "invalid", "reserved to direct clients");
+ return;
+ }
+
+ /* renew the token if required */
+ wrap_json_unpack(afb_req_json(req), "{s?:b}", _refresh_token_, &refresh);
+ if (refresh)
+ afb_context_refresh(&xreq->context);
+
+ /* make the result */
+ wrap_json_pack(&r, "{s:s,s:s,s:i,s:i}",
+ "uuid", afb_session_uuid(xreq->context.session),
+ "token", afb_session_token(xreq->context.session),
+ "timeout", afb_session_timeout(xreq->context.session),
+ "remain", afb_session_what_remains(xreq->context.session));
+ afb_req_success(req, r, NULL);
+}
+
+