From 6634329b7a1a94aa1555649b933010fb9fcd0381 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Tue, 12 Sep 2017 13:47:10 +0200 Subject: [PATCH] afb-api-so-v2: improve generation of description MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: Ibe8fbbec59cc8db35c635346f0d441f0140eced5 Signed-off-by: José Bollo --- src/afb-api-so-v2.c | 33 ++++++++++++++++++++++++++++++--- 1 file 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); -- 2.16.6