diff options
author | José Bollo <jose.bollo@iot.bzh> | 2018-02-15 17:17:37 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2018-02-15 17:23:33 +0100 |
commit | fb444de0bcb53917086c724444d7f8df25e8e806 (patch) | |
tree | 47c265199c7a841e4042d89dd54039af39dd5e28 /src/afb-monitor.c | |
parent | 66df82496e8b5cf0e49e8fe4ddd57827bbd0e3c5 (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.c | 29 |
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); +} + + |