diff options
author | José Bollo <jose.bollo@iot.bzh> | 2017-09-12 13:47:10 +0200 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2017-10-09 14:08:28 +0200 |
commit | 6634329b7a1a94aa1555649b933010fb9fcd0381 (patch) | |
tree | d2544773b35b800b054ad1b5b3f7781c46986077 | |
parent | d7933c0f61a3316cc3d1ca7e74d30e193de2f612 (diff) |
afb-api-so-v2: improve generation of description
Change-Id: Ibe8fbbec59cc8db35c635346f0d441f0140eced5
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r-- | src/afb-api-so-v2.c | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/afb-api-so-v2.c b/src/afb-api-so-v2.c index 8403366b..32812243 100644 --- a/src/afb-api-so-v2.c +++ b/src/afb-api-so-v2.c @@ -185,6 +185,35 @@ static struct json_object *addperm_key_valint(struct json_object *o, const char return addperm_key_val(o, key, json_object_new_int(val)); } +static struct json_object *addauth_or_array(struct json_object *o, const struct afb_auth *auth); + +static struct json_object *addauth(struct json_object *o, const struct afb_auth *auth) +{ + switch(auth->type) { + case afb_auth_No: return addperm(o, json_object_new_boolean(0)); + case afb_auth_Token: return addperm_key_valstr(o, "session", "check"); + case afb_auth_LOA: return addperm_key_valint(o, "LOA", auth->loa); + case afb_auth_Permission: return addperm_key_valstr(o, "permission", auth->text); + case afb_auth_Or: return addperm_key_val(o, "anyOf", addauth_or_array(json_object_new_array(), auth)); + case afb_auth_And: return addauth(addauth(o, auth->first), auth->next); + case afb_auth_Not: return addperm_key_val(o, "not", addauth(NULL, auth->first)); + case afb_auth_Yes: return addperm(o, json_object_new_boolean(1)); + } + return o; +} + +static struct json_object *addauth_or_array(struct json_object *o, const struct afb_auth *auth) +{ + if (auth->type != afb_auth_Or) + json_object_array_add(o, addauth(NULL, auth)); + else { + addauth_or_array(o, auth->first); + addauth_or_array(o, auth->next); + } + + return o; +} + static struct json_object *make_description_openAPIv3(struct api_so_v2 *desc) { char buffer[256]; @@ -221,10 +250,8 @@ static struct json_object *make_description_openAPIv3(struct api_so_v2 *desc) a = addperm_key_valstr(a, "token", "refresh"); if (verb->session & AFB_SESSION_LOA_MASK_V2) a = addperm_key_valint(a, "LOA", verb->session & AFB_SESSION_LOA_MASK_V2); -#if 0 if (verb->auth) - a = -#endif + a = addauth(a, verb->auth); if (a) json_object_object_add(g, "x-permissions", a); |