- /* cynara isn't reentrant */
- pthread_mutex_lock(&mutex);
-
- /* lazy initialisation */
- if (!handle) {
- rc = cynara_initialize(&handle, NULL);
- if (rc != CYNARA_API_SUCCESS) {
- handle = NULL;
- ERROR("cynara initialisation failed with code %d", rc);
- return 0;
- }
+static struct json_object *addperm_key_valint(struct json_object *o, const char *key, int val)
+{
+ 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));