Ported for 2.3.1 wearable profile 22/62822/8 submit/tizen_mobile/20160324.022053 submit/tizen_wearable/20160324.022113
authorsajal.j <sajal.jain@samsung.com>
Fri, 18 Mar 2016 13:02:15 +0000 (18:32 +0530)
committerroot <sajal.jain@samsung.com>
Tue, 22 Mar 2016 10:54:32 +0000 (16:24 +0530)
Change-Id: I63ecc417f79688006e1051fadb4e7ba791a3453e

15 files changed:
CMakeLists.txt
common/fido_json_handler.c
common/fido_uaf_types.h
fido_svc_ui/CMakeLists.txt
fido_svc_ui/fido_ui_server.c
packaging/fido-client.spec
server/CMakeLists.txt
server/fido_app_id_handler.c
server/fido_asm_plugin_manager.c
server/fido_privilege_checker.c
test/Dummy_ASM_DBUS/CMakeLists.txt
test/Fido_Sample_RPM/res/auth_req.json
test/Fido_Sample_RPM/res/dereg_req.json
test/Fido_Sample_RPM/res/reg_req.json
test/shell_tc/fido_shell_tc.c

index ce5570c..54f1735 100644 (file)
@@ -14,3 +14,4 @@ ADD_DEPENDENCIES(fido-service fido-ui-service)
 #INSTALL(DIRECTORY lib/fido/asm/ DESTINATION lib/fido/asm/)
 ADD_SUBDIRECTORY(test/Dummy_ASM_DBUS)
 ADD_SUBDIRECTORY(test/shell_tc)
+
index 2b41500..3f108cf 100644 (file)
@@ -96,7 +96,7 @@
 #define _JSON_KEY_FACET_ID "facetID"
 #define _JSON_KEY_HEADER "header"
 #define _JSON_KEY_FC_PARAMS "fcParams"
-#define _JSON_KEY_FINAL_CHALLENGE              "finalChallenge"
+#define _JSON_KEY_FINAL_CHALLENGE   "finalChallenge"
 #define _JSON_KEY_ASSERTIONS "assertions"
 #define _JSON_KEY_POLICY "policy"
 #define _JSON_KEY_ACCEPTED "accepted"
 #define _JSON_KEY_VERSION "version"
 #define _JSON_KEY_IDS "ids"
 #define _JSON_KEY_APP_REGS "appRegs"
-#define _JSON_KEY_REQ_TYPE     "requestType"
-#define _JSON_KEY_KEY_ID               "keyID"
-#define _JSON_KEY_TRANSACTION          "transaction"
+#define _JSON_KEY_REQ_TYPE  "requestType"
+#define _JSON_KEY_KEY_ID    "keyID"
+#define _JSON_KEY_TRANSACTION   "transaction"
 #define _JSON_KEY_CONTENT_TYPE "contentType"
 #define _JSON_KEY_CONTENT "content"
-#define _JSON_KEY_REGISTER             "Register"
+#define _JSON_KEY_REGISTER  "Register"
 #define _JSON_KEY_AUTHENTICATE "Authenticate"
-#define _JSON_KEY_DEREGISTER           "Deregister"
+#define _JSON_KEY_DEREGISTER    "Deregister"
 #define _JSON_KEY_ASM_VERSION "asmVersion"
 #define _JSON_KEY_GET_REGS "GetRegistrations"
 #define _JSON_KEY_KTY "kty"
 #define _JSON_KEY_CRV "crv"
 #define _JSON_KEY_X "x"
 #define _JSON_KEY_Y "y"
-#define _JSON_KEY_ARGS         "args"
+#define _JSON_KEY_ARGS  "args"
 
 #define _JSON_KEY_VENDOR "vendor"
 #define _JSON_KEY_BIN_PATH "bin_path"
 #define _JSON_KEY_DBUS_METHOD_NAME "dbus_method_name"
 /*JSON keys end*/
 
+#ifdef WITH_JSON_BUILDER
 static void
 __add_string_to_json_object(JsonBuilder *json_obj, const char *key, const char *val)
 {
@@ -149,6 +150,326 @@ __add_int_to_json_object(JsonBuilder *json_obj, const char *key, int val)
     json_builder_set_member_name(json_obj, key);
     json_builder_add_int_value(json_obj, val);
 }
+#endif
+
+#ifndef WITH_JSON_BUILDER
+static gboolean
+__uaf_composer_compose_asm_init(JsonGenerator **generator, JsonObject **root_obj)
+{
+    _INFO("__uaf_composer_compose_asm_init");
+    JsonNode *root_node = NULL;
+
+    *generator = json_generator_new();
+    if(*generator == NULL) {
+        _INFO("json_generator_new is NULL");
+        goto CATCH;
+    }
+
+    root_node = json_node_new(JSON_NODE_OBJECT);
+    if (root_node == NULL) {
+        _INFO("*json_node_new is NULL");
+        goto CATCH;
+    }
+
+    *root_obj = json_object_new();
+    if(*root_obj == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    json_node_take_object(root_node, *root_obj);
+    json_generator_set_root(*generator, root_node);
+
+    return TRUE;
+
+
+    CATCH:
+    if (generator != NULL && *generator != NULL) {
+        g_object_unref(*generator);
+        *generator = NULL;
+    }
+
+    if (root_node != NULL) {
+        json_node_free(root_node);
+        root_node = NULL;
+    }
+
+    if (root_obj != NULL && *root_obj != NULL) {
+        g_object_unref(*root_obj);
+        *root_obj = NULL;
+    }
+    return FALSE;
+}
+
+static gboolean
+__uaf_composer_compose_asm_response_init(JsonGenerator **generator, JsonObject **root_obj)
+{
+    _INFO("__uaf_composer_compose_asm_init");
+    JsonNode *root_node = NULL;
+    JsonNode *gen_node = NULL;
+    JsonObject *gen_object = NULL;
+    JsonArray *rootArray = json_array_new();
+
+    *generator = json_generator_new();
+    if(*generator == NULL) {
+        _INFO("json_generator_new is NULL");
+        goto CATCH;
+    }
+
+    gen_node = json_node_new(JSON_NODE_ARRAY);
+    if (gen_node == NULL) {
+        _INFO("*json_node_new is NULL");
+        goto CATCH;
+    }
+
+    root_node = json_node_new(JSON_NODE_OBJECT);
+    if (root_node == NULL) {
+        _INFO("*json_node_new is NULL");
+        goto CATCH;
+    }
+
+    gen_object = json_object_new();
+    if(gen_object == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    *root_obj = json_object_new();
+    if(*root_obj == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    json_node_take_object(root_node, *root_obj);
+    json_array_add_element(rootArray, root_node);
+    json_node_take_array(gen_node, rootArray);
+    json_generator_set_root(*generator, gen_node);
+
+    return TRUE;
+
+
+    CATCH:
+    if (generator != NULL && *generator != NULL) {
+        g_object_unref(*generator);
+        *generator = NULL;
+    }
+
+    if (gen_node != NULL) {
+        json_node_free(gen_node);
+        root_node = NULL;
+    }
+
+    if (root_node != NULL) {
+        json_node_free(root_node);
+        root_node = NULL;
+    }
+
+    if (root_obj != NULL && *root_obj != NULL) {
+        g_object_unref(*root_obj);
+        *root_obj = NULL;
+    }
+    return FALSE;
+}
+
+static gboolean
+__uaf_composer_compose_asm_version(_version_t *version, JsonNode **node)
+{
+    _INFO("__uaf_composer_compose_asm_version");
+    if (!version && version->major && version->minor) {
+        _INFO("invalid uaf version");
+        return FALSE;
+    }
+
+    *node = json_node_new(JSON_NODE_OBJECT);
+    if (*node == NULL) {
+        _INFO("json_node_new is NULL");
+        goto CATCH;
+    }
+
+    JsonObject *obj = json_object_new();
+    if(obj == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    json_object_set_int_member(obj, _JSON_KEY_MAJOR, version->major);
+    json_object_set_int_member(obj, _JSON_KEY_MINOR, version->minor);
+
+    json_node_take_object(*node, obj);
+
+    return TRUE;
+
+    CATCH:
+    if (node !=NULL && *node != NULL) {
+        json_node_free(*node);
+        *node = NULL;
+    }
+
+    if (obj != NULL && obj != NULL) {
+        g_object_unref(obj);
+        obj = NULL;
+    }
+    return FALSE;
+}
+
+static gboolean
+__uaf_composer_compose_asm_reg_in(_fido_asm_reg_in_t *reg_in, JsonNode **node)
+{
+    _INFO("__uaf_composer_compose_asm_versiom");
+    if (!reg_in) {
+        _INFO("invalid uaf version");
+        return FALSE;
+    }
+
+    *node = json_node_new(JSON_NODE_OBJECT);
+    if (*node == NULL) {
+        _INFO("json_node_new is NULL");
+        goto CATCH;
+    }
+
+    JsonObject *obj = json_object_new();
+    if(obj == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    if (reg_in->app_id)
+        json_object_set_string_member(obj, _JSON_KEY_APPID, reg_in->app_id);
+
+    if (reg_in->user_name)
+        json_object_set_string_member(obj, _JSON_KEY_USER_NAME, reg_in->user_name);
+
+    if (reg_in->final_challenge)
+        json_object_set_string_member(obj, _JSON_KEY_FINAL_CHALLENGE, reg_in->final_challenge);
+
+    if (reg_in->attestation_type)
+        json_object_set_int_member(obj, _JSON_KEY_ATT_TYPE, reg_in->attestation_type);
+
+    json_node_take_object(*node, obj);
+
+    return TRUE;
+
+    CATCH:
+    if (node != NULL && *node != NULL) {
+        json_node_free(*node);
+        *node = NULL;
+    }
+
+    if (obj != NULL && obj != NULL) {
+        g_object_unref(obj);
+        obj = NULL;
+    }
+    return FALSE;
+}
+
+static gboolean
+__uaf_composer_compose_asm_auth_in(_fido_asm_auth_in_t *auth_in, JsonNode **node)
+{
+    _INFO("__uaf_composer_compose_asm_auth_in");
+    if (!auth_in) {
+        _INFO("invalid uaf version");
+        return FALSE;
+    }
+
+    GList* iter;
+    *node = json_node_new(JSON_NODE_OBJECT);
+    if (*node == NULL) {
+        _INFO("json_node_new is NULL");
+        goto CATCH;
+    }
+
+    JsonObject *obj = json_object_new();
+    if(obj == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    if (auth_in->app_id)
+        json_object_set_string_member(obj, _JSON_KEY_APPID, auth_in->app_id);
+
+    if (auth_in->key_ids) {
+        JsonArray *ids = json_array_new();
+
+    for (iter = auth_in->key_ids; iter != NULL; iter = g_list_next(iter)) {
+            json_array_add_string_element(ids, (char *)iter->data);
+    }
+
+        json_object_set_array_member(obj, _JSON_KEY_KEY_IDS, ids);
+    }
+
+    if (auth_in->final_challenge)
+        json_object_set_string_member(obj, _JSON_KEY_FINAL_CHALLENGE, auth_in->final_challenge);
+
+    if(auth_in->trans_list != NULL) {
+        JsonArray *transArray = json_array_new();
+        GList *iter = g_list_first(auth_in->trans_list);
+        while(iter != NULL) {
+            _fido_asm_transaction_t *val = (_fido_asm_transaction_t*)(iter->data);
+            JsonNode *transNode = json_node_new(JSON_NODE_OBJECT);
+            JsonObject *transObject = json_object_new();
+
+            json_object_set_string_member(transObject, _JSON_KEY_CONTENT_TYPE, val->content_type);
+            json_object_set_string_member(transObject, _JSON_KEY_CONTENT, val->content);
+
+            JsonNode *tcNode = json_node_new(JSON_NODE_OBJECT);
+            JsonObject *tcObject = json_object_new();
+
+            if(val->display_charac != NULL) {
+                json_object_set_int_member(tcObject, _JSON_KEY_WIDTH, val->display_charac->width);
+                json_object_set_int_member(tcObject, _JSON_KEY_HEIGHT, val->display_charac->height);
+                json_object_set_int_member(tcObject, _JSON_KEY_BIT_DEPTH, val->display_charac->bit_depth);
+                json_object_set_int_member(tcObject, _JSON_KEY_COLOR_TYPE, val->display_charac->color_type);
+                json_object_set_int_member(tcObject, _JSON_KEY_COMPRESSION, val->display_charac->compression);
+                json_object_set_int_member(tcObject, _JSON_KEY_FILTER, val->display_charac->filter);
+                json_object_set_int_member(tcObject, _JSON_KEY_INTERLACE, val->display_charac->interlace);
+
+                if(val->display_charac != NULL) {
+                    JsonArray *plteArray = json_array_new();
+
+                    GList *plte_iter = g_list_first(val->display_charac->plte);
+                    while(plte_iter != NULL) {
+                        _fido_asm_rgb_pallette_entry_t *plte = (_fido_asm_rgb_pallette_entry_t*)(plte_iter->data);
+                        JsonNode *plteNode = json_node_new(JSON_NODE_OBJECT);
+                        JsonObject *plteObject = json_object_new();
+
+                        json_object_set_int_member(plteObject, _JSON_KEY_R, plte->r);
+                        json_object_set_int_member(plteObject, _JSON_KEY_B, plte->b);
+                        json_object_set_int_member(plteObject, _JSON_KEY_G, plte->g);
+
+                        json_node_take_object(plteNode, plteObject);
+                        json_array_add_element(plteArray, plteNode);
+
+                        plte_iter = plte_iter->next;
+                    }
+                    json_object_set_array_member(tcObject, _JSON_KEY_PLTE, plteArray);
+                }
+                json_node_take_object(tcNode, tcObject);
+                json_object_set_member(transObject, "tcDisplayPNGCharacterstics", tcNode);
+            }
+            json_node_take_object(transNode, transObject);
+            json_array_add_element(transArray, transNode);
+            iter = iter->next;
+        }
+        json_object_set_array_member(obj, _JSON_KEY_TRANSACTION, transArray);
+    }
+
+    json_node_take_object(*node, obj);
+
+    return TRUE;
+
+    CATCH:
+    if (*node != NULL) {
+        json_node_free(*node);
+        *node = NULL;
+    }
+
+    if (obj != NULL && obj != NULL) {
+        g_object_unref(obj);
+        obj = NULL;
+    }
+    return FALSE;
+}
+#endif
 
 static char*
 __get_string_from_json_object(JsonObject *obj, const char *key)
@@ -174,7 +495,7 @@ __get_int_from_json_object(JsonObject *obj, const char *key)
         return _INVALID_INT;
 
     int int_val = json_object_get_int_member(obj, key);
-    dlog_print(DLOG_INFO, "FIDO", "[%s] = [%d]", key, int_val);
+    _INFO("[%s] = [%d]", key, int_val);
 
     return int_val;
 }
@@ -338,12 +659,12 @@ _uaf_parser_parse_match(JsonObject *match_obj)
         JsonArray *auth_algo_arr = json_object_get_array_member(match_obj, _JSON_KEY_AUTH_ALGOS);
         if (auth_algo_arr) {
             match_criteria->auth_algo_list = __get_int_list_from_json_array(auth_algo_arr);
-               }
+        }
 
         JsonArray *assertion_schm_arr = json_object_get_array_member(match_obj, _JSON_KEY_ASSERT_SCHEMES);
         if (assertion_schm_arr) {
             match_criteria->assertion_scheme_list = __get_string_list_from_json_array(assertion_schm_arr);
-               }
+        }
 
         JsonArray *att_type_arr = json_object_get_array_member(match_obj, _JSON_KEY_ATT_TYPES);
         if (att_type_arr) {
@@ -355,7 +676,7 @@ _uaf_parser_parse_match(JsonObject *match_obj)
         _INFO("_uaf_parser_parse_match is returning match_criteria");
 
         return match_criteria;
-       }
+    }
 
     _INFO("_uaf_parser_parse_match is returning NULL");
     return NULL;
@@ -801,6 +1122,8 @@ CATCH:
 _asm_out_t*
 _uaf_parser_parse_asm_response_reg(const char *asm_response_json, int *error_code)
 {
+    _INFO("_uaf_parser_parse_asm_response_reg[%s]", asm_response_json);
+
     _asm_out_t *asm_out = NULL;
     int status = 0;
     GError *parser_err = NULL;
@@ -954,6 +1277,8 @@ _uaf_composer_compose_asm_reg_request(_version_t *version, int auth_index, _fido
 {
     _INFO("_uaf_composer_compose_asm_reg_request start");
 
+#ifdef WITH_JSON_BUILDER
+
     /*Builder start*/
     JsonBuilder *builder = json_builder_new();
     json_builder_begin_object(builder);
@@ -985,7 +1310,7 @@ _uaf_composer_compose_asm_reg_request(_version_t *version, int auth_index, _fido
     __add_string_to_json_object(builder, _JSON_KEY_USER_NAME, reg_in->user_name);
     __add_string_to_json_object(builder, _JSON_KEY_FINAL_CHALLENGE, reg_in->final_challenge);
 
-    if (reg_in->attestation_type != _INVALID_INT) {
+    if (reg_in->attestation_type) {
         json_builder_set_member_name(builder, _JSON_KEY_ATT_TYPE);
 
         json_builder_add_int_value(builder, reg_in->attestation_type);
@@ -1014,8 +1339,7 @@ _uaf_composer_compose_asm_reg_request(_version_t *version, int auth_index, _fido
         if (gen != NULL)
             g_object_unref(gen);
 
-        _INFO("%s", json);
-
+        _INFO("asm_reg_req : %s", json);
         _INFO("_uaf_composer_compose_asm_reg_request end");
 
         return 0;
@@ -1025,6 +1349,70 @@ _uaf_composer_compose_asm_reg_request(_version_t *version, int auth_index, _fido
 
     _INFO("_uaf_composer_compose_asm_reg_request fail");
     return -1;
+
+#else
+
+    _INFO("Composer _uaf_composer_compose_asm_reg_request");
+
+    JsonNode *version_node = NULL;
+    JsonNode *register_node = NULL;
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if (__uaf_composer_compose_asm_init(&generator, &root_obj) != TRUE) {
+        _INFO("__uaf_composer_compose_asm_init fail");
+        goto CATCH;
+    }
+
+    json_object_set_string_member(root_obj, _JSON_KEY_REQ_TYPE, _JSON_KEY_REGISTER);
+
+    if (__uaf_composer_compose_asm_version(version, &version_node) != TRUE) {
+        _INFO("__uaf_composer_compose_asm_version fail");
+        goto CATCH;
+    }
+    else
+        json_object_set_member(root_obj, _JSON_KEY_ASM_VERSION, version_node);
+
+    json_object_set_int_member(root_obj, _JSON_KEY_AUTH_INDEX, auth_index);
+
+    if (!__uaf_composer_compose_asm_reg_in(reg_in, &register_node)) {
+        _INFO("__uaf_composer_compose_asm_reg_in fail");
+        goto CATCH;
+    }
+    else
+        json_object_set_member(root_obj, _JSON_KEY_ARGS, register_node);
+
+    *asm_reg_json = json_generator_to_data(generator, NULL);
+
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    return 0;
+
+    CATCH:
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if (version_node != NULL) {
+        json_node_free(version_node);
+        version_node = NULL;
+    }
+
+    if (register_node != NULL) {
+        json_node_free(register_node);
+        register_node = NULL;
+    }
+
+    if (root_obj != NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+    return -1;
+#endif
 }
 
 int
@@ -1033,6 +1421,8 @@ _uaf_composer_compose_asm_auth_request(_version_t *version, int auth_index, _fid
 {
     _INFO("_uaf_composer_compose_asm_auth_request start");
 
+#ifdef WITH_JSON_BUILDER
+
     /*Builder start*/
     JsonBuilder *builder = json_builder_new();
     json_builder_begin_object(builder);
@@ -1095,11 +1485,16 @@ _uaf_composer_compose_asm_auth_request(_version_t *version, int auth_index, _fid
 
             /*contentType*/
             __add_string_to_json_object(builder, _JSON_KEY_CONTENT_TYPE, val->content_type);
+
             /*content*/
             __add_string_to_json_object(builder, _JSON_KEY_CONTENT, val->content);
+
             /*tcDisplayPNGCharacteristics*/
             if (val->display_charac != NULL) {
 
+                json_builder_set_member_name(builder, "tcDisplayPNGCharacteristics");
+                json_builder_begin_object(builder);
+
                 __add_int_to_json_object(builder, _JSON_KEY_WIDTH, val->display_charac->width);
                 __add_int_to_json_object(builder, _JSON_KEY_HEIGHT, val->display_charac->height);
                 __add_int_to_json_object(builder, _JSON_KEY_BIT_DEPTH, val->display_charac->bit_depth);
@@ -1111,22 +1506,27 @@ _uaf_composer_compose_asm_auth_request(_version_t *version, int auth_index, _fid
 
                 /*plte*/
                 if (val->display_charac->plte != NULL) {
-
+                    json_builder_set_member_name(builder, _JSON_KEY_PLTE);
                     json_builder_begin_array(builder);
 
                     GList *plte_iter = g_list_first(val->display_charac->plte);
                     while (plte_iter != NULL) {
                         _fido_asm_rgb_pallette_entry_t *plte = (_fido_asm_rgb_pallette_entry_t*)(plte_iter->data);
 
+                        json_builder_begin_object(builder);
+
                         __add_int_to_json_object(builder, _JSON_KEY_R, plte->r);
                         __add_int_to_json_object(builder, _JSON_KEY_G, plte->g);
                         __add_int_to_json_object(builder, _JSON_KEY_B, plte->b);
 
+                        json_builder_end_object(builder);
+
                         plte_iter = plte_iter->next;
                     }
 
                     json_builder_end_array(builder);
                 }
+                json_builder_end_object(builder);
             }
 
             json_builder_end_object(builder);
@@ -1160,7 +1560,6 @@ _uaf_composer_compose_asm_auth_request(_version_t *version, int auth_index, _fid
             g_object_unref(gen);
 
         _INFO("%s", json);
-
         _INFO("_uaf_composer_compose_asm_auth_request end");
 
         return 0;
@@ -1170,6 +1569,73 @@ _uaf_composer_compose_asm_auth_request(_version_t *version, int auth_index, _fid
 
     _INFO("_uaf_composer_compose_asm_auth_request fail");
     return -1;
+
+#else
+    JsonNode *version_node = NULL;
+    JsonNode *auth_node = NULL;
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if (__uaf_composer_compose_asm_init(&generator, &root_obj) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_auth_request fail");
+        goto CATCH;
+    }
+
+    /*requestType*/
+    json_object_set_string_member(root_obj, _JSON_KEY_REQ_TYPE, _JSON_KEY_AUTHENTICATE);
+
+    /*authIndex*/
+    json_object_set_int_member(root_obj, _JSON_KEY_AUTH_INDEX, auth_index);
+
+    /*version*/
+    if (__uaf_composer_compose_asm_version(version, &version_node) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_auth_request fail");
+        goto CATCH;
+    }
+    else
+        json_object_set_member(root_obj, _JSON_KEY_ASM_VERSION, version_node);
+
+    /*args*/
+    if (__uaf_composer_compose_asm_auth_in(auth_in, &auth_node) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_auth_request fail");
+        goto CATCH;
+    }
+    else
+        json_object_set_member(root_obj, _JSON_KEY_ARGS, auth_node);
+
+    /*Transaction list composing*/
+
+    *asm_auth_json = json_generator_to_data(generator, NULL);
+
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    return 0;
+
+CATCH:
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if (version_node != NULL) {
+        json_node_free(version_node);
+        version_node = NULL;
+    }
+
+    if (auth_node != NULL) {
+        json_node_free(auth_node);
+        auth_node = NULL;
+    }
+
+    if (root_obj != NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+    return -1;
+#endif
 }
 
 int
@@ -1178,6 +1644,8 @@ _uaf_composer_compose_asm_dereg_request(_version_t *version, int auth_index, _ma
 {
     _INFO("_uaf_composer_compose_asm_dereg_request start");
 
+#ifdef WITH_JSON_BUILDER
+
     /*Builder start*/
     JsonBuilder *builder = json_builder_new();
     JsonBuilder *root = json_builder_begin_object(builder);
@@ -1230,7 +1698,6 @@ _uaf_composer_compose_asm_dereg_request(_version_t *version, int auth_index, _ma
             g_object_unref(gen);
 
         _INFO("%s", json);
-
         _INFO("_uaf_composer_compose_asm_dereg_request end");
 
         return 0;
@@ -1241,6 +1708,77 @@ _uaf_composer_compose_asm_dereg_request(_version_t *version, int auth_index, _ma
     _INFO("_uaf_composer_compose_asm_dereg_request fail");
     return -1;
 
+#else
+
+    JsonNode *version_node = NULL;
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if (__uaf_composer_compose_asm_init(&generator, &root_obj) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_dereg_request fail");
+        goto CATCH;
+    }
+
+    /*requestType*/
+    json_object_set_string_member(root_obj, _JSON_KEY_REQ_TYPE, _JSON_KEY_DEREGISTER);
+
+    /*authIndex*/
+    json_object_set_int_member(root_obj, _JSON_KEY_AUTH_INDEX, auth_index);
+
+    /*version*/
+    if (__uaf_composer_compose_asm_version(version, &version_node) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_dereg_request fail");
+        goto CATCH;
+    }
+    else
+        json_object_set_member(root_obj, _JSON_KEY_ASM_VERSION, version_node);
+
+    /*args*/
+    JsonNode *argNode = json_node_new(JSON_NODE_OBJECT);
+    JsonObject *argObject = json_object_new();
+
+    json_object_set_string_member(argObject, _JSON_KEY_APPID, dereg_in->app_id);
+    json_object_set_string_member(argObject, _JSON_KEY_KEY_ID, dereg_in->key_id);
+
+    json_node_take_object(argNode, argObject);
+
+    json_object_set_member(root_obj, _JSON_KEY_ARGS, argNode);
+
+    gsize len = 0;
+    char *json = json_generator_to_data(generator, &len);
+    if (json != NULL) {
+        *asm_dereg_json = json;
+        _INFO("_uaf_composer_compose_uaf_process_response_reg return success");
+
+        _INFO("%s", json);
+
+        _INFO("_uaf_composer_compose_asm_dereg_request end");
+    }
+
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    return 0;
+
+CATCH:
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if (version_node != NULL) {
+        json_node_free(version_node);
+        version_node = NULL;
+    }
+
+    if (root_obj != NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+    return -1;
+#endif
 }
 
 //{"appID":"https://qa-egypt.noknoktest.com:443/UAFSampleProxy/uaf/facets.uaf","challenge":"uYBuGQf7r-LND16Q0GUpPRi112UjCtcym3awjm-MmmI","channelBinding":{},"facetID":"com.noknok.android.sampleapp"}
@@ -1249,6 +1787,8 @@ _uaf_composer_compose_final_challenge(const char *app_id, const char *challenge,
 {
     _INFO("_uaf_composer_compose_final_challenge");
 
+#ifdef WITH_JSON_BUILDER
+
     JsonBuilder *builder = json_builder_new();
     json_builder_begin_object(builder);
 
@@ -1334,6 +1874,101 @@ _uaf_composer_compose_final_challenge(const char *app_id, const char *challenge,
 
     return ((char*)fc_enc);
 
+#else
+
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if(__uaf_composer_compose_asm_init(&generator, &root_obj) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_init fail");
+        goto CATCH;
+    }
+
+    json_object_set_string_member(root_obj, _JSON_KEY_APPID, app_id);
+    json_object_set_string_member(root_obj, _JSON_KEY_CHALLENGE, challenge);
+
+    JsonNode *jsonNode = NULL;
+    JsonObject *jsonObject = json_object_new();
+
+    if(ch_bin != NULL) {
+        JsonParser *chb_parser = json_parser_new();
+
+        GError *chb_err = NULL;
+        bool chb_parsed = json_parser_load_from_data(chb_parser, ch_bin, -1, &chb_err);
+        if (chb_parsed == FALSE) {
+            return NULL;
+        }
+
+        JsonNode *chb_root = json_parser_get_root(chb_parser);
+        if(chb_root == NULL) {
+            return NULL;
+        }
+
+        JsonObject *chb_root_obj = json_node_get_object(chb_root);
+        if(chb_root_obj == NULL) {
+            return NULL;
+        }
+
+        char *end_pt = (char*)json_object_get_string_member(chb_root_obj, _JSON_KEY_SERVER_END_POINT);
+        char *cert =(char*)json_object_get_string_member(chb_root_obj, _JSON_KEY_TLS_SERVER_CERT);
+        char *uni = (char*)json_object_get_string_member(chb_root_obj, _JSON_KEY_TLS_UNIQUE);
+        char *cid = (char*)json_object_get_string_member(chb_root_obj, _JSON_KEY_CID_PUB_KEY);
+
+        json_object_set_string_member(jsonObject, _JSON_KEY_SERVER_END_POINT, end_pt);
+        json_object_set_string_member(jsonObject, _JSON_KEY_TLS_SERVER_CERT, cert);
+        json_object_set_string_member(jsonObject, _JSON_KEY_TLS_UNIQUE, uni);
+        json_object_set_string_member(jsonObject, _JSON_KEY_CID_PUB_KEY, cid);
+
+        SAFE_DELETE(end_pt);
+        SAFE_DELETE(cert);
+        SAFE_DELETE(uni);
+        SAFE_DELETE(cid);
+
+        g_object_unref(chb_parser);
+    }
+
+    /*If no channledbinding to add, putting empty*/
+    json_node_take_object(jsonNode, jsonObject);
+    json_object_set_member(root_obj, _JSON_KEY_CH_BINDING, jsonNode);
+
+    char *json_str = NULL;
+    gsize len = 0;
+    json_str = json_generator_to_data(generator, &len);
+
+    if (json_str == NULL)
+        return NULL;
+
+    int inlen = strlen(json_str);
+    int fc_enc_len = (4 * ((inlen + 2) / 3)) + 1;
+
+    unsigned char *fc_enc = calloc(1, fc_enc_len);
+
+    int r = _fido_b64url_encode((unsigned char*)json_str, inlen, fc_enc, &fc_enc_len);
+
+    _INFO("_fido_b64url_encode len=[%d]", fc_enc_len);
+
+    SAFE_DELETE(json_str);
+    g_object_unref(generator);
+
+    if (r != 0)
+        return NULL;
+
+    _INFO("_fido_b64url_encoded string=%s", fc_enc);
+
+    return ((char*)fc_enc);
+
+CATCH:
+    if(generator!=NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if(root_obj!=NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+    return NULL;
+#endif
 }
 
 int
@@ -1341,6 +1976,8 @@ _uaf_composer_compose_uaf_process_response_reg(_op_header_t *header, char *final
 {
     _INFO("_uaf_composer_compose_uaf_process_response_reg");
 
+#ifdef WITH_JSON_BUILDER
+
     RET_IF_FAIL(header != NULL, FIDO_ERROR_PROTOCOL_ERROR);
 
     /*Only 1.0 protocol support*/
@@ -1388,6 +2025,7 @@ _uaf_composer_compose_uaf_process_response_reg(_op_header_t *header, char *final
     json_builder_begin_array(builder);
     GList *assertions_iter = g_list_first(assertions);
     while (assertions_iter != NULL) {
+
         _auth_reg_assertion_t *ass_data = (_auth_reg_assertion_t*)(assertions_iter->data);
         json_builder_begin_object(builder);
         json_builder_set_member_name(builder, _JSON_KEY_ASSERTION);
@@ -1396,66 +2034,66 @@ _uaf_composer_compose_uaf_process_response_reg(_op_header_t *header, char *final
         json_builder_set_member_name(builder, _JSON_KEY_ASSERT_SCHEME);
         json_builder_add_string_value(builder, ass_data->assertion_schm);
 
-               /*tcDisplayPNGCharacteristics*/
-               if (ass_data->tc_disp_char_list != NULL) {
-                       json_builder_set_member_name(builder, "tcDisplayPNGCharacteristics");
-                       json_builder_begin_array(builder);
+        /*tcDisplayPNGCharacteristics*/
+        if (ass_data->tc_disp_char_list != NULL) {
+            json_builder_set_member_name(builder, "tcDisplayPNGCharacteristics");
+            json_builder_begin_array(builder);
 
-                       GList *iter = g_list_first(ass_data->tc_disp_char_list);
-                       while (iter != NULL) {
+            GList *iter = g_list_first(ass_data->tc_disp_char_list);
+            while (iter != NULL) {
 
-                               fido_display_png_characteristics_descriptor_s *png_data =
-                                               (fido_display_png_characteristics_descriptor_s*) (iter->data);
+                fido_display_png_characteristics_descriptor_s *png_data =
+                (fido_display_png_characteristics_descriptor_s*) (iter->data);
 
-                               if (png_data != NULL) {
+                if (png_data != NULL) {
 
-                                       json_builder_begin_object(builder);
+                    json_builder_begin_object(builder);
 
-                                       __add_int_to_json_object(builder, _JSON_KEY_WIDTH, png_data->width);
-                                       __add_int_to_json_object(builder, _JSON_KEY_HEIGHT, png_data->height);
-                                       __add_int_to_json_object(builder, _JSON_KEY_BIT_DEPTH, png_data->bit_depth);
-                                       __add_int_to_json_object(builder, _JSON_KEY_COLOR_TYPE, png_data->color_type);
-                                       __add_int_to_json_object(builder, _JSON_KEY_COMPRESSION, png_data->compression);
-                                       __add_int_to_json_object(builder, _JSON_KEY_FILTER, png_data->filter);
-                                       __add_int_to_json_object(builder, _JSON_KEY_INTERLACE, png_data->interlace);
+                __add_int_to_json_object(builder, _JSON_KEY_WIDTH, png_data->width);
+                __add_int_to_json_object(builder, _JSON_KEY_HEIGHT, png_data->height);
+                __add_int_to_json_object(builder, _JSON_KEY_BIT_DEPTH, png_data->bit_depth);
+                __add_int_to_json_object(builder, _JSON_KEY_COLOR_TYPE, png_data->color_type);
+                __add_int_to_json_object(builder, _JSON_KEY_COMPRESSION, png_data->compression);
+                __add_int_to_json_object(builder, _JSON_KEY_FILTER, png_data->filter);
+                __add_int_to_json_object(builder, _JSON_KEY_INTERLACE, png_data->interlace);
 
 
-                                       if (png_data->plte != NULL) {
-                                               /*plte array start*/
+                if (png_data->plte != NULL) {
+                        /*plte array start*/
 
-                                               json_builder_set_member_name(builder, _JSON_KEY_PLTE);
-                                               json_builder_begin_array(builder);
+                        json_builder_set_member_name(builder, _JSON_KEY_PLTE);
+                        json_builder_begin_array(builder);
 
-                                               GList *plte_iter = g_list_first(png_data->plte);
-                                               while (plte_iter != NULL) {
+                        GList *plte_iter = g_list_first(png_data->plte);
+                        while (plte_iter != NULL) {
 
-                                                       fido_rgb_pallette_entry_s *plte_data = (fido_rgb_pallette_entry_s*)(plte_iter->data);
-                                                       if (plte_data != NULL) {
-                                                               json_builder_begin_object(builder);
+                            fido_rgb_pallette_entry_s *plte_data = (fido_rgb_pallette_entry_s*)(plte_iter->data);
+                            if (plte_data != NULL) {
+                                json_builder_begin_object(builder);
 
-                                                               __add_int_to_json_object(builder, _JSON_KEY_R, plte_data->r);
-                                                               __add_int_to_json_object(builder, _JSON_KEY_G, plte_data->g);
-                                                               __add_int_to_json_object(builder, _JSON_KEY_B, plte_data->b);
+                                __add_int_to_json_object(builder, _JSON_KEY_R, plte_data->r);
+                                __add_int_to_json_object(builder, _JSON_KEY_G, plte_data->g);
+                                __add_int_to_json_object(builder, _JSON_KEY_B, plte_data->b);
 
-                                                               json_builder_end_object(builder);
-                                                       }
+                                json_builder_end_object(builder);
+                            }
 
-                                                       plte_iter = plte_iter->next;
-                                               }
+                            plte_iter = plte_iter->next;
+                        }
 
-                                               json_builder_end_array(builder);
+                        json_builder_end_array(builder);
 
-                                               /*plte array end*/
-                                       }
+                        /*plte array end*/
+                    }
 
-                                       json_builder_end_object(builder);
-                               }
+                    json_builder_end_object(builder);
+                }
 
-                               iter = iter->next;
-                       }
+                iter = iter->next;
+            }
 
-                       json_builder_end_array(builder);
-               }
+            json_builder_end_array(builder);
+        }
 
         json_builder_end_object(builder);
 
@@ -1494,11 +2132,155 @@ _uaf_composer_compose_uaf_process_response_reg(_op_header_t *header, char *final
     _INFO("_uaf_composer_compose_uaf_process_response_reg return fail");
     g_object_unref(gen);
     return FIDO_ERROR_PROTOCOL_ERROR;
+
+#else
+
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if(__uaf_composer_compose_asm_response_init(&generator, &root_obj) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_init fail");
+        goto CATCH;
+    }
+
+    /*header*/
+    JsonNode *_header = json_node_new(JSON_NODE_OBJECT);
+    JsonObject *obj1 = json_object_new();
+    if(obj1 == NULL) {
+        _INFO("json_object_new is NULL");
+        goto CATCH;
+    }
+
+    json_object_set_string_member(obj1, _JSON_KEY_APPID, header->app_id);
+    json_object_set_string_member(obj1, _JSON_KEY_OP, header->operation);
+    json_object_set_string_member(obj1, _JSON_KEY_SERVER_DATA, header->server_data);
+
+    JsonNode *upv = json_node_new(JSON_NODE_OBJECT);
+    JsonObject *obj2 = json_object_new();
+    if(obj2 == NULL) {
+        _INFO("json_object_new is NULL");
+        goto CATCH;
+    }
+
+    json_object_set_int_member(obj2, _JSON_KEY_MAJOR, header->version->major);
+    json_object_set_int_member(obj2, _JSON_KEY_MINOR, header->version->minor);
+
+    json_node_take_object(upv, obj2);
+
+    json_object_set_member(obj1, _JSON_KEY_UPV, upv);
+
+    json_node_take_object(_header, obj1);
+    json_object_set_member(root_obj, _JSON_KEY_HEADER, _header);
+
+    /*fcparams*/
+
+    json_object_set_string_member(root_obj, _JSON_KEY_FC_PARAMS, final_ch);
+    _INFO("[LOG] final_ch = %s", final_ch);
+
+    /*assertions*/
+    JsonArray *assArray = json_array_new();
+    GList *assertions_iter = g_list_first(assertions);
+    while (assertions_iter != NULL) {
+
+        _auth_reg_assertion_t *ass_data = (_auth_reg_assertion_t*)(assertions_iter->data);
+        JsonNode *assNode = json_node_new(JSON_NODE_OBJECT);;
+        JsonObject *assObject = json_object_new();
+        json_object_set_string_member(assObject, _JSON_KEY_ASSERTION, ass_data->assertion);
+        json_object_set_string_member(assObject, _JSON_KEY_ASSERT_SCHEME, ass_data->assertion_schm);
+
+        /*tcDisplayPNGCharacteristics*/
+        if (ass_data->tc_disp_char_list != NULL) {
+            JsonArray *tcArray = json_array_new();
+            GList *iter = g_list_first(ass_data->tc_disp_char_list);
+            while (iter != NULL) {
+                fido_display_png_characteristics_descriptor_s *png_data =
+                        (fido_display_png_characteristics_descriptor_s*) (iter->data);
+
+                if (png_data != NULL) {
+                    JsonNode *tcNode = json_node_new(JSON_NODE_OBJECT);;
+                    JsonObject *tcObject = json_object_new();
+
+                    json_object_set_int_member(tcObject, _JSON_KEY_WIDTH, png_data->width);
+                    json_object_set_int_member(tcObject, _JSON_KEY_HEIGHT, png_data->height);
+                    json_object_set_int_member(tcObject, _JSON_KEY_BIT_DEPTH, png_data->bit_depth);
+                    json_object_set_int_member(tcObject, _JSON_KEY_COLOR_TYPE, png_data->color_type);
+                    json_object_set_int_member(tcObject, _JSON_KEY_COMPRESSION, png_data->compression);
+                    json_object_set_int_member(tcObject, _JSON_KEY_FILTER, png_data->filter);
+                    json_object_set_int_member(tcObject, _JSON_KEY_INTERLACE, png_data->interlace);
+
+                    if (png_data->plte != NULL) {
+                        /*plte array start*/
+                        JsonArray *plteArray = json_array_new();
+                        GList *plte_iter = g_list_first(png_data->plte);
+                        while (plte_iter != NULL) {
+
+                            fido_rgb_pallette_entry_s *plte_data = (fido_rgb_pallette_entry_s*)(plte_iter->data);
+                            if (plte_data != NULL) {
+                                JsonNode *plteNode = json_node_new(JSON_NODE_OBJECT);;
+                                JsonObject *plteObject = json_object_new();
+                                json_object_set_int_member(plteObject, _JSON_KEY_R, plte_data->r);
+                                json_object_set_int_member(plteObject, _JSON_KEY_G, plte_data->g);
+                                json_object_set_int_member(plteObject, _JSON_KEY_B, plte_data->b);
+
+                                json_node_take_object(plteNode, plteObject);
+                                json_array_add_element(plteArray, plteNode);
+                            }
+                            plte_iter = plte_iter->next;
+                        }
+                        json_object_set_array_member(tcObject, _JSON_KEY_PLTE, plteArray);
+                    }
+                    json_node_take_object(tcNode, tcObject);
+                    json_array_add_element(tcArray, tcNode);
+                }
+                iter = iter->next;
+            }
+            json_object_set_array_member(assObject, "tcDisplayPNGCharacteristics", tcArray);
+        }
+        json_node_take_object(assNode, assObject);
+        json_array_add_element(assArray, assNode);
+        assertions_iter = assertions_iter->next;
+    }
+    json_object_set_array_member(root_obj, _JSON_KEY_ASSERTIONS, assArray);
+
+    gsize len = 0;
+    char *json = json_generator_to_data(generator, &len);
+    if (json != NULL) {
+        *uaf_response = json;
+        _INFO("_uaf_composer_compose_uaf_process_response_reg return success");
+        _INFO("uaf_response=[%s]", json);
+
+        if (generator != NULL)
+            g_object_unref(generator);
+
+        return 0;
+    }
+
+    _INFO("_uaf_composer_compose_uaf_process_response_reg return fail");
+
+    if(generator!=NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+    return 0;
+
+CATCH:
+    if(generator!=NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if(root_obj!=NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+    return -1;
+#endif
 }
 
 int
 _uaf_composer_compose_uaf_process_response_auth(_op_header_t *header, char *final_ch, GList *assertions, char **uaf_response)
 {
+    _INFO("_uaf_composer_compose_uaf_process_response_auth");
     return _uaf_composer_compose_uaf_process_response_reg(header, final_ch, assertions, uaf_response);
 }
 
@@ -1507,6 +2289,8 @@ _uaf_composer_compose_dereg_request(_response_t *uaf_res)
 {
     _INFO("_uaf_composer_compose_dereg_request");
 
+#ifdef WITH_JSON_BUILDER
+
     /*Only 1.0 protocol support*/
 
     JsonBuilder *builder = json_builder_new();
@@ -1642,11 +2426,135 @@ _uaf_composer_compose_dereg_request(_response_t *uaf_res)
     if (dereg_json != NULL) {
         _INFO("_uaf_composer_compose_dereg_request return success");
         _INFO("%s", dereg_json);
+
+        return dereg_json;
+    }
+
+    _INFO("_uaf_composer_compose_dereg_request return fail");
+    return NULL;
+
+#else
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if(__uaf_composer_compose_asm_init(&generator, &root_obj) != TRUE) {
+        _INFO("_uaf_composer_compose_asm_init fail");
+        goto CATCH;
+    }
+
+    /*header*/
+    JsonNode *_headerNode = json_node_new(JSON_NODE_OBJECT);
+    JsonObject *_headerObject = json_object_new();
+
+    json_object_set_string_member(_headerObject, _JSON_KEY_APPID, uaf_res->header->app_id);
+    json_object_set_string_member(_headerObject, _JSON_KEY_OP, strdup(_UAF_OPERATION_NAME_KEY_DE_REG));
+    json_object_set_string_member(_headerObject, _JSON_KEY_SERVER_DATA, uaf_res->header->server_data);
+
+    JsonNode *upvNode = json_node_new(JSON_NODE_OBJECT);
+    JsonObject *upvObject = json_object_new();
+    json_object_set_int_member(upvObject, _JSON_KEY_MAJOR, uaf_res->header->version->major);
+    json_object_set_int_member(upvObject, _JSON_KEY_MINOR, uaf_res->header->version->minor);
+    json_node_take_object(upvNode, upvObject);
+
+    json_object_set_member(_headerObject, _JSON_KEY_UPV, upvNode);
+    json_node_take_object(_headerNode, _headerObject);
+
+    json_object_set_member(root_obj, _JSON_KEY_HEADER, _headerNode);
+    /*header*/
+
+    _INFO("after header");
+
+
+    /*appID*/
+    if (uaf_res->header->app_id == NULL) {
+        _ERR("appID is missing");
+
+        g_object_unref(generator);
+        return NULL;
+    }
+    json_object_set_string_member(root_obj, _JSON_KEY_APPID, uaf_res->header->app_id);
+    /*appID*/
+
+    /*authenticators*/
+    JsonArray *authArray = json_array_new();
+    GList *assertions_iter = g_list_first(uaf_res->assertion_list);
+    while (assertions_iter != NULL) {
+
+        _auth_reg_assertion_t *ass_data = (_auth_reg_assertion_t*)(assertions_iter->data);
+
+        char *assrt = ass_data->assertion;
+
+        _INFO("%s", assrt);
+
+        _auth_reg_assertion_tlv_t *assrt_tlv = _tlv_util_decode_reg_assertion(assrt);
+        if (assrt_tlv == NULL) {
+            _ERR("Invalid assertion format");
+
+            g_object_unref(generator);
+            return NULL;
+        }
+
+        char *aaid = strdup(assrt_tlv->aaid);
+        JsonNode *authNode = json_node_new(JSON_NODE_OBJECT);
+        JsonObject *authObject = json_object_new();
+
+        if (aaid != NULL) {
+            json_object_set_string_member(authObject, _JSON_KEY_AAID, aaid);
+            _INFO("aaid=[%s]", aaid);
+        }
+
+        if (assrt_tlv->key_id != NULL) {
+            int inlen = assrt_tlv->key_id_len;
+            int enc_len = (4 * ((inlen + 2) / 3)) + 1;
+
+            unsigned char *key_id_enc = calloc(1, enc_len);
+
+            int r = _fido_b64url_encode(assrt_tlv->key_id, inlen, key_id_enc, &enc_len);
+
+            _INFO("_fido_b64url_encode len=[%d]", enc_len);
+
+            if ((key_id_enc != NULL) && (r == 0)) {
+
+                _INFO("_fido_b64url_encoded string=%s", key_id_enc);
+                json_object_set_string_member(authObject, _JSON_KEY_KEY_ID, (char *)key_id_enc);
+                _INFO("keyid=[%s]", key_id_enc);
+            }
+        }
+        json_node_take_object(authNode, authObject);
+        json_array_add_element(authArray, authNode);
+        assertions_iter = assertions_iter->next;
+    }
+    json_object_set_array_member(root_obj, _JSON_KEY_AUTHENTICATORS_SMALL, authArray);
+    /*authenticators*/
+
+    gsize len = 0;
+    char *dereg_json = json_generator_to_data(generator, &len);
+    if(generator!=NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+    if (dereg_json != NULL) {
+        _INFO("_uaf_composer_compose_dereg_request return success");
+        _INFO("%s", dereg_json);
+
         return dereg_json;
     }
 
+    return NULL;
+
+CATCH:
+    if(generator!=NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if(root_obj!=NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
     _INFO("_uaf_composer_compose_dereg_request return fail");
     return NULL;
+#endif
 }
 
 static _policy_t*
@@ -2211,6 +3119,8 @@ _uaf_composer_compose_get_registrations_request(const char *auth_index)
 {
     _INFO("_uaf_composer_compose_get_registrations_request");
 
+#ifdef WITH_JSON_BUILDER
+
     JsonBuilder *builder = json_builder_new();
 
     json_builder_begin_object(builder);
@@ -2253,6 +3163,56 @@ _uaf_composer_compose_get_registrations_request(const char *auth_index)
 
     g_object_unref(gen);
     return json;
+
+#else
+    JsonGenerator *generator = json_generator_new();
+    JsonObject *root_obj = json_object_new();
+
+    if(__uaf_composer_compose_asm_init(&generator, &root_obj) != TRUE) {
+        _INFO("_uaf_composer_compse_asm_init fail");
+        goto CATCH;
+    }
+
+    /*Version*/
+    JsonNode *jsonNode = NULL;
+    JsonObject *jsonObject = json_object_new();
+    json_object_set_int_member(jsonObject, _JSON_KEY_MAJOR, 1);
+    json_object_set_int_member(jsonObject, _JSON_KEY_MINOR, 0);
+    json_node_take_object(jsonNode, jsonObject);
+
+    json_object_set_member(root_obj, _JSON_KEY_ASM_VERSION, jsonNode);
+
+    /*authenticatorIndex*/
+    int auth_index_int = -1;
+    sscanf(auth_index, "%d", &auth_index_int);
+    json_object_set_int_member(root_obj, _JSON_KEY_AUTH_INDEX, auth_index_int);
+
+    /*requestType : "GetRegisterations" */
+    json_object_set_string_member(root_obj, _JSON_KEY_REQ_TYPE, _JSON_KEY_GET_REGS);
+
+    gsize len = 0;
+    char *get_reg_json = json_generator_to_data(generator, &len);
+
+    if(generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    return get_reg_json;
+
+CATCH:
+    if(generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if(root_obj != NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+
+    return NULL;
+#endif
 }
 
 int
@@ -2288,6 +3248,7 @@ _convert_asm_status_code_to_uaf_error(int asm_status_code)
 }
 */
 
+
 _fido_asm_proxy_t*
 _parse_asm_conf_file(const char *file_name)
 {
@@ -2338,4 +3299,5 @@ _parse_asm_conf_file(const char *file_name)
 CATCH:
     g_object_unref(parser);
     return proxy;
+
 }
index b07e764..65c2312 100755 (executable)
 #include <tizen.h>
 #include <stdint.h>
 
+#ifndef WITH_JSON_BUILDER
+#define TIZEN_ERROR_FIDO        -0x01030000
+#endif
+
 /**
  * @addtogroup CAPI_FIDO_MODULE
  * @{
index 5c393fe..f680bdd 100644 (file)
@@ -1,8 +1,35 @@
+IF(NOT DEFINED UI_PACKAGE_NAME)
+    SET(UI_PACKAGE_NAME "org.tizen.fidosvcui")
+ENDIF(NOT DEFINED UI_PACKAGE_NAME)
 
-SET (UI_PACKAGE_NAME "org.tizen.fidosvcui")
+SET(UI_PREFIX "/usr/apps/${UI_PACKAGE_NAME}")
 
-SET(UI_SRCS 
-        ${CMAKE_SOURCE_DIR}/fido_svc_ui/fido_ui_server.c
+IF(NOT DEFINED UI_BINDIR)
+    SET(UI_BINDIR "${UI_PREFIX}/bin")
+ENDIF(NOT DEFINED UI_BINDIR)
+
+IF(NOT DEFINED UI_RESDIR)
+    SET(UI_RESDIR "${UI_PREFIX}/res")
+ENDIF(NOT DEFINED UI_RESDIR)
+
+IF(NOT DEFINED UI_LOCALEDIR)
+    SET(UI_LOCALEDIR "${UI_PREFIX}/res/locale")
+ENDIF(NOT DEFINED UI_LOCALEDIR)
+
+IF(NOT DEFINED UI_MANIFESTDIR)
+    SET(UI_MANIFESTDIR "/usr/share/packages")
+ENDIF(NOT DEFINED UI_MANIFESTDIR)
+
+IF(NOT DEFINED UI_DESKTOP_ICONDIR)
+    SET(UI_DESKTOP_ICONDIR "/usr/share/icons/default/small")
+ENDIF(NOT DEFINED UI_DESKTOP_ICONDIR)
+
+IF(NOT DEFINED UI_DESKTOP_ICON)
+    SET(UI_DESKTOP_ICON ${UI_PACKAGE_NAME}.png)
+ENDIF(NOT DEFINED UI_DESKTOP_ICON)
+
+SET(UI_SRCS
+    ${CMAKE_SOURCE_DIR}/fido_svc_ui/fido_ui_server.c
 )
 
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common)
@@ -12,17 +39,17 @@ ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE_NAME}\"")
 
 INCLUDE(FindPkgConfig)
 pkg_check_modules(UI_PKGS REQUIRED
-               elementary
-               efl-extension
-               capi-appfw-application
-               capi-system-system-settings
-               dlog
-               json-glib-1.0
-               glib-2.0
-               gio-unix-2.0)
+                elementary
+                efl-extension
+                capi-appfw-application
+                capi-system-system-settings
+                dlog
+                json-glib-1.0
+                glib-2.0
+                gio-unix-2.0)
 
 FOREACH(flag ${UI_PKGS_CFLAGS})
-       SET(EXTRA_CFLGAS "${EXTRA_CFLGAS} ${flag}")
+    SET(EXTRA_CFLGAS "${EXTRA_CFLGAS} ${flag}")
 ENDFOREACH(flag)
 
 ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_SOURCE_DIR}/common/fido-stub.c ${CMAKE_SOURCE_DIR}/common/fido-stub.h
@@ -37,6 +64,12 @@ ADD_DEPENDENCIES(${UI_PACKAGE_NAME} ${CMAKE_SOURCE_DIR}/common/fido-stub.c)
 TARGET_LINK_LIBRARIES(${UI_PACKAGE_NAME} "-pie" ${UI_PKGS_LDFLAGS})
 CONFIGURE_FILE(${UI_PACKAGE_NAME}.xml.in ${UI_PACKAGE_NAME}.xml)
 
+if(USE_JSON_BUILDER)
 INSTALL(TARGETS ${UI_PACKAGE_NAME} DESTINATION ${BIN_DIR})
-INSTALL(FILES ${UI_PACKAGE_NAME}.xml DESTINATION /opt/share/packages/)
-INSTALL(FILES ${CMAKE_SOURCE_DIR}/fido_svc_ui/${UI_PACKAGE_NAME}.png DESTINATION /opt/share/icons/default/small/)
+INSTALL(FILES ${UI_PACKAGE_NAME}.xml DESTINATION ${MANIFEST_DIR})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/fido_svc_ui/${UI_PACKAGE_NAME}.png DESTINATION ${ICON_DIR})
+else()
+INSTALL(TARGETS ${UI_PACKAGE_NAME} DESTINATION ${UI_BINDIR})
+INSTALL(FILES ${UI_PACKAGE_NAME}.xml DESTINATION ${UI_MANIFESTDIR})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/fido_svc_ui/${UI_DESKTOP_ICON} DESTINATION ${UI_DESKTOP_ICONDIR})
+endif()
index 46b6712..b97016a 100644 (file)
@@ -39,6 +39,7 @@
 #include "fido_internal_types.h"
 
 #define _FIDO_SERVICE_UI_DBUS_PATH       "/org/tizen/fidosvcui"
+
 #define _FIDO_SERVICE_PATH "/usr/bin/fido-service"
 
 #define _FREEDESKTOP_SERVICE    "org.freedesktop.DBus"
@@ -88,6 +89,7 @@ __free_ui_data(ui_data_s *data)
     SAFE_DELETE(data);
 }
 
+#ifdef WITH_JSON_BUILDER
 static void
 __add_string_to_json_object(JsonBuilder *json_obj, const char *key, const char *val)
 {
@@ -107,6 +109,7 @@ __add_int_to_json_object(JsonBuilder *json_obj, const char *key, int val)
     json_builder_set_member_name(json_obj, key);
     json_builder_add_int_value(json_obj, val);
 }
+#endif
 
 static void
 __init_dbus(void)
@@ -181,122 +184,192 @@ __send_response_to_fido_svc(int error, const char *ui_resp)
 char*
 _create_json_response(ui_data_s *selected_auth)
 {
-       _INFO("_create_json_response");
+    _INFO("_create_json_response");
 
-       /*Builder start*/
-       JsonBuilder *builder = json_builder_new();
-       json_builder_begin_object(builder);
+#ifdef WITH_JSON_BUILDER
 
-       /*requestType*/
-       __add_string_to_json_object(builder, UI_DATA_ASM_ID, selected_auth->asm_id);
-       __add_string_to_json_object(builder, UI_DATA_AUTH_INDEX, selected_auth->auth_index);
-       __add_string_to_json_object(builder, UI_DATA_LABEL, selected_auth->label);
-       __add_int_to_json_object(builder, UI_DATA_ATT_TYPE, selected_auth->att_t);
+    /*Builder start*/
+    JsonBuilder *builder = json_builder_new();
+    json_builder_begin_object(builder);
 
-       json_builder_end_object(builder);
-       /*Builder end*/
+    /*requestType*/
+    __add_string_to_json_object(builder, UI_DATA_ASM_ID, selected_auth->asm_id);
+    __add_string_to_json_object(builder, UI_DATA_AUTH_INDEX, selected_auth->auth_index);
+    __add_string_to_json_object(builder, UI_DATA_LABEL, selected_auth->label);
+    __add_int_to_json_object(builder, UI_DATA_ATT_TYPE, selected_auth->att_t);
 
-       JsonGenerator *gen = json_generator_new();
-       JsonNode *root_builder = json_builder_get_root(builder);
-       json_generator_set_root(gen, root_builder);
+    json_builder_end_object(builder);
+    /*Builder end*/
 
-       json_node_free(root_builder);
-       g_object_unref(builder);
+    JsonGenerator *gen = json_generator_new();
+    JsonNode *root_builder = json_builder_get_root(builder);
+    json_generator_set_root(gen, root_builder);
 
-       gsize len = 0;
-       char *json = json_generator_to_data(gen, &len);
-       if (json != NULL) {
+    json_node_free(root_builder);
+    g_object_unref(builder);
 
-               if (gen != NULL)
-                       g_object_unref(gen);
+    gsize len = 0;
+    char *json = json_generator_to_data(gen, &len);
+    if (json != NULL) {
 
-               _INFO("%s", json);
-               _INFO("_create_json_response end");
+        if (gen != NULL)
+            g_object_unref(gen);
 
-               return json;
-       }
+        _INFO("%s", json);
+        _INFO("_create_json_response end");
+
+        return json;
+    }
+
+    g_object_unref(gen);
+
+    _INFO("_create_json_response fail");
+    return NULL;
+
+#else
+
+    /*Builder start*/
+    JsonGenerator *generator = NULL;
+    JsonObject *root_obj = NULL;
+    JsonNode *root_node = NULL;
+
+    generator = json_generator_new();
+    if(generator == NULL) {
+        _INFO("json_generator_new is NULL");
+        goto CATCH;
+    }
+
+    root_obj = json_object_new();
+    if(root_obj == NULL) {
+        _INFO("json_object_new in NULL");
+        goto CATCH;
+    }
+
+    root_node = json_node_new(JSON_NODE_OBJECT);
+    if (root_node == NULL) {
+        _INFO("*json_node_new is NULL");
+        goto CATCH;
+    }
+
+    /*requestType*/
+    json_object_set_string_member(root_obj, UI_DATA_ASM_ID, selected_auth->asm_id);
+    json_object_set_string_member(root_obj, UI_DATA_AUTH_INDEX, selected_auth->auth_index);
+    json_object_set_string_member(root_obj, UI_DATA_LABEL, selected_auth->label);
+    json_object_set_int_member(root_obj, UI_DATA_ATT_TYPE, selected_auth->att_t);
+
+    json_node_take_object(root_node, root_obj);
+    json_generator_set_root(generator, root_node);
+    /*Builder end*/
+
+    char *json = json_generator_to_data(generator, NULL);
+
+    if (json != NULL) {
 
-       g_object_unref(gen);
+        if (generator != NULL)
+            g_object_unref(generator);
 
-       _INFO("_create_json_response fail");
-       return NULL;
+        _INFO("%s", json);
+        _INFO("_create_json_response end");
+
+        return json;
+    }
+
+CATCH:
+    if (generator != NULL) {
+        g_object_unref(generator);
+        generator = NULL;
+    }
+
+    if (root_node != NULL) {
+        json_node_free(root_node);
+        root_node = NULL;
+    }
+
+    if (root_obj != NULL) {
+        g_object_unref(root_obj);
+        root_obj = NULL;
+    }
+    return NULL;
+#endif
+
+    return NULL;
 }
 
 void
 _list_destroy(gpointer data)
 {
-       ui_data_s *list_data = (ui_data_s *) data;
-       SAFE_DELETE(list_data->auth_index);
-       SAFE_DELETE(list_data->label);
+    ui_data_s *list_data = (ui_data_s *) data;
+    SAFE_DELETE(list_data->auth_index);
+    SAFE_DELETE(list_data->label);
 }
 
 void
 _hide_ui(void)
 {
-       elm_genlist_clear(ad->genlist);
-       g_list_free_full(ad->ui_data_list, (GDestroyNotify) _list_destroy);
-       ad->ui_data_list = NULL;
-       evas_object_hide(ad->win);
+    elm_genlist_clear(ad->genlist);
+    g_list_free_full(ad->ui_data_list, (GDestroyNotify) _list_destroy);
+    ad->ui_data_list = NULL;
+    evas_object_hide(ad->win);
 }
 
 void genlist_select_cb(void *data, Evas_Object *obj, void *event_info)
 {
-       _INFO("genlist_select_cb");
+    _INFO("genlist_select_cb");
 
-       if (data == NULL) {
-               _INFO("data is NULL");
-               return;
-       }
+    if (data == NULL) {
+        _INFO("data is NULL");
+        return;
+    }
 
-       if (event_info == NULL) {
-               _INFO("event_info is NULL");
-               return;
-       }
+    if (event_info == NULL) {
+        _INFO("event_info is NULL");
+        return;
+    }
 
-       ui_data_s *selected_auth = (ui_data_s*) data;
-       auth_option_selected = TRUE;
+    ui_data_s *selected_auth = (ui_data_s*) data;
+    auth_option_selected = TRUE;
 
-       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
-       char *sel_txt = (char *) elm_object_item_data_get(item);
+    Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+    char *sel_txt = (char *) elm_object_item_data_get(item);
 
-       if (!strcmp(sel_txt, selected_auth->label)) {
-               char *response = _create_json_response(selected_auth);
-               if (response != NULL) {
-                       _hide_ui();
+    if (!strcmp(sel_txt, selected_auth->label)) {
+        char *response = _create_json_response(selected_auth);
+        if (response != NULL) {
+            _hide_ui();
 
-                       _INFO("sending response to ui adaptor");
+            _INFO("sending response to ui adaptor");
             __send_response_to_fido_svc(FIDO_ERROR_NONE, response);
 
             SAFE_DELETE(response);
-               }
-       }
+        }
+    }
 }
 
 static char*
 _item_label_get(void *data, Evas_Object *obj, const char *part)
 {
-       char buf[256];
-       snprintf(buf, sizeof(buf), "%s", (char*) data);
-       return strdup(buf);
+    char buf[256];
+    snprintf(buf, sizeof(buf), "%s", (char*) data);
+    return strdup(buf);
 }
 
 void
 _auth_arr_cb(JsonArray *array, guint index, JsonNode *element_node, gpointer user_data)
 {
-       _INFO("_auth_arr_cb");
+    _INFO("_auth_arr_cb");
 
-       JsonObject *obj = NULL;
-       obj = json_node_get_object(element_node);
-       if (!obj) {
-               _ERR("json_node_get_object() failed");
-               return;
-       }
+    JsonObject *obj = NULL;
+    obj = json_node_get_object(element_node);
+    if (!obj) {
+        _ERR("json_node_get_object() failed");
+        return;
+    }
 
-       ui_data_s *ui_data = (ui_data_s *) calloc(1, sizeof(ui_data_s));
-       if (!ui_data) {
-               _ERR("Out of memory");
-               return;
-       }
+    ui_data_s *ui_data = (ui_data_s *) calloc(1, sizeof(ui_data_s));
+    if (!ui_data) {
+        _ERR("Out of memory");
+        return;
+    }
 
     const char *asm_id = json_object_get_string_member(obj, UI_DATA_ASM_ID);
     if (!asm_id) {
@@ -306,24 +379,24 @@ _auth_arr_cb(JsonArray *array, guint index, JsonNode *element_node, gpointer use
         return;
     }
 
-       const char *auth_idx = NULL;
-       auth_idx = json_object_get_string_member(obj, UI_DATA_AUTH_INDEX);
-       if (!auth_idx) {
-               _ERR("json_object_get_string_member() failed");
+    const char *auth_idx = NULL;
+    auth_idx = json_object_get_string_member(obj, UI_DATA_AUTH_INDEX);
+    if (!auth_idx) {
+        _ERR("json_object_get_string_member() failed");
 
         __free_ui_data(ui_data);
-               return;
-       }
+        return;
+    }
 
-       const char *label = NULL;
-       label = json_object_get_string_member(obj, UI_DATA_LABEL);
+    const char *label = NULL;
+    label = json_object_get_string_member(obj, UI_DATA_LABEL);
 
-       int att = -1;
-       att = json_object_get_int_member(obj, UI_DATA_ATT_TYPE);
+    int att = -1;
+    att = json_object_get_int_member(obj, UI_DATA_ATT_TYPE);
 
     ui_data->asm_id = strdup(asm_id);
 
-       ui_data->auth_index = strdup(auth_idx);
+    ui_data->auth_index = strdup(auth_idx);
     if (label == NULL) {
         ui_data->label = calloc(1, 128);
         snprintf(ui_data->label, 127, "%s", "Unknown Authenticator");
@@ -331,75 +404,75 @@ _auth_arr_cb(JsonArray *array, guint index, JsonNode *element_node, gpointer use
     else
         ui_data->label = strdup(label);
 
-       ui_data->att_t = att;
-       ad->ui_data_list = g_list_append(ad->ui_data_list, ui_data);
+    ui_data->att_t = att;
+    ad->ui_data_list = g_list_append(ad->ui_data_list, ui_data);
 
     _INFO("Adding to ui_data list | auth_index %s | label %s | att_type %d",
                                             auth_idx, ui_data->label, att);
 
-       elm_genlist_item_append(ad->genlist, ad->itc, ui_data->label, NULL,
-                               ELM_GENLIST_ITEM_NONE, genlist_select_cb, ui_data);
+    elm_genlist_item_append(ad->genlist, ad->itc, ui_data->label, NULL,
+                ELM_GENLIST_ITEM_NONE, genlist_select_cb, ui_data);
 
 }
 
 static void
 _parse_json_ui_in(const char *ui_auth_json)
 {
-       _INFO("_parse_json_ui_in data %s", ui_auth_json);
-
-       char * ui_auth = strdup(ui_auth_json);
-       GError *parse_err = NULL;
-       JsonParser *parser = NULL;
-       JsonNode *root = NULL;
-       JsonArray *auth_data_arr = NULL;
-
-       parser = json_parser_new();
-       if (!parser) {
-               _ERR("json_parser_new failed");
-               goto CATCH;
-       }
+    _INFO("_parse_json_ui_in data %s", ui_auth_json);
+
+    char * ui_auth = strdup(ui_auth_json);
+    GError *parse_err = NULL;
+    JsonParser *parser = NULL;
+    JsonNode *root = NULL;
+    JsonArray *auth_data_arr = NULL;
+
+    parser = json_parser_new();
+    if (!parser) {
+        _ERR("json_parser_new failed");
+        goto CATCH;
+    }
 
-       json_parser_load_from_data(parser, ui_auth, -1, &parse_err);
-       if (parse_err != NULL) {
-               _ERR("json parse failure");
-               goto CATCH;
-       }
+    json_parser_load_from_data(parser, ui_auth, -1, &parse_err);
+    if (parse_err != NULL) {
+        _ERR("json parse failure");
+        goto CATCH;
+    }
 
-       root = json_parser_get_root(parser);
-       if (!root) {
-               _ERR("json_parser_get_root() failed");
-               goto CATCH;
-       }
+    root = json_parser_get_root(parser);
+    if (!root) {
+        _ERR("json_parser_get_root() failed");
+        goto CATCH;
+    }
 
-       auth_data_arr = json_node_get_array(root);
-       if (!auth_data_arr) {
-               _ERR("json_node_get_array() failed");
-               goto CATCH;
-       }
+    auth_data_arr = json_node_get_array(root);
+    if (!auth_data_arr) {
+        _ERR("json_node_get_array() failed");
+        goto CATCH;
+    }
 
-       /* Genlist Item */
-       ad->itc = elm_genlist_item_class_new();
-       ad->itc->item_style = "default";
-       ad->itc->func.text_get = _item_label_get;
-       ad->itc->func.content_get = NULL;
-       ad->itc->func.state_get = NULL;
+    /* Genlist Item */
+    ad->itc = elm_genlist_item_class_new();
+    ad->itc->item_style = "default";
+    ad->itc->func.text_get = _item_label_get;
+    ad->itc->func.content_get = NULL;
+    ad->itc->func.state_get = NULL;
 
-       json_array_foreach_element(auth_data_arr, _auth_arr_cb, NULL);
+    json_array_foreach_element(auth_data_arr, _auth_arr_cb, NULL);
 
-CATCH:
+    CATCH:
     if (parser != NULL) {
         g_object_unref(parser);
         parser = NULL;
     }
 
-       if (parse_err != NULL) {
-               g_error_free(parse_err);
-               parse_err = NULL;
-       }
+    if (parse_err != NULL) {
+        g_error_free(parse_err);
+        parse_err = NULL;
+    }
 
-       SAFE_DELETE(ui_auth);
+    SAFE_DELETE(ui_auth);
 
-       return;
+    return;
 }
 
 // TODO button callback
@@ -420,7 +493,7 @@ static void btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) {
 */
 
 static void
-_win_back_cb(void *data, Evas_Object *obj, void *event_info) 
+_win_back_cb(void *data, Evas_Object *obj, void *event_info)
 {
     if (auth_option_selected == FALSE) {
         _ERR("Authenticator not selected by user");
@@ -432,81 +505,81 @@ _win_back_cb(void *data, Evas_Object *obj, void *event_info)
 static void
 _create_ui(void)
 {
-       _INFO("_create_ui");
+    _INFO("_create_ui");
 
-       /* Window */
-       //ad->win = elm_win_add(NULL, UI_SVC_PACKAGE,  ELM_WIN_BASIC);
+    /* Window */
+    //ad->win = elm_win_add(NULL, UI_SVC_PACKAGE,  ELM_WIN_BASIC);
     ad->win = elm_win_util_standard_add(_UI_SVC_PACKAGE, "Authenticator Selection UI");
-       if (ad->win != NULL)
-               _INFO("elm_win_util_standard_add successful");
-       else
-               _ERR("elm_win_util_standard_add failed");
-               
-       elm_win_autodel_set(ad->win, EINA_TRUE);
-
-       if (elm_win_wm_rotation_supported_get(ad->win)) {
-               int rots[4] = { 0, 90, 180, 270 };
-               elm_win_wm_rotation_available_rotations_set(ad->win,
-                               (const int *) (&rots), 4);
-       }
+    if (ad->win != NULL)
+        _INFO("elm_win_util_standard_add successful");
+    else
+        _ERR("elm_win_util_standard_add failed");
+
+    elm_win_autodel_set(ad->win, EINA_TRUE);
+
+    if (elm_win_wm_rotation_supported_get(ad->win)) {
+        int rots[4] = { 0, 90, 180, 270 };
+        elm_win_wm_rotation_available_rotations_set(ad->win,
+                (const int *) (&rots), 4);
+    }
 
-       eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, _win_back_cb, ad);
-       evas_object_smart_callback_add(ad->win, "unfocused", _win_back_cb, NULL);
-
-       /* Conformant */
-       ad->conform = elm_conformant_add(ad->win);
-       elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
-       elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
-       evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND,
-                       EVAS_HINT_EXPAND);
-       elm_win_resize_object_add(ad->win, ad->conform);
-       evas_object_show(ad->conform);
-
-       /* Naviframe */
-       ad->nf = elm_naviframe_add(ad->conform);
-       elm_object_content_set(ad->conform, ad->nf);
-       evas_object_show(ad->nf);
-
-       /* Box */
-       ad->box = elm_box_add(ad->nf);
-
-       /* Genlist */
-       ad->genlist = elm_genlist_add(ad->box);
-       elm_genlist_homogeneous_set(ad->genlist, EINA_TRUE);
-
-       /* Radio */
-       Evas_Object *radio_main = elm_radio_add(ad->genlist);
-       elm_radio_state_value_set(radio_main, 0);
-       elm_radio_value_set(radio_main, 0);
-       evas_object_data_set(ad->genlist, "radio_main", radio_main);
-
-       evas_object_size_hint_weight_set(ad->genlist, EVAS_HINT_EXPAND,
-                       EVAS_HINT_EXPAND);
-       evas_object_size_hint_align_set(ad->genlist, EVAS_HINT_FILL,
-                       EVAS_HINT_FILL);
-       evas_object_show(ad->genlist);
-       elm_box_pack_end(ad->box, ad->genlist);
-
-       //~ /* Button */ // TODO check button visibility
-       //~ ad->btn = elm_button_add(ad->box);
-       //~ elm_object_text_set(ad->btn, "OK");
-       //~ evas_object_size_hint_weight_set(ad->btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-       //~ evas_object_size_hint_align_set(ad->btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
-
-       //~ Evas_Object *btn_bg = elm_bg_add(ad->btn);
-       //~ elm_bg_color_set(btn_bg, 90, 160, 200);
-
-       //~ evas_object_smart_callback_add(ad->btn, "clicked", btn_clicked_cb, ad);
-       //~ evas_object_show(ad->btn);
-       //~ elm_box_pack_end(ad->box, ad->btn);
-
-
-       elm_naviframe_item_push(ad->nf, "Select Authenticator",
-                       NULL, NULL, ad->box, NULL);
-
-       /* Keep window hidden after base gui is set up */
+    eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, _win_back_cb, ad);
+    evas_object_smart_callback_add(ad->win, "unfocused", _win_back_cb, NULL);
+
+    /* Conformant */
+    ad->conform = elm_conformant_add(ad->win);
+    elm_win_indicator_mode_set(ad->win, ELM_WIN_INDICATOR_SHOW);
+    elm_win_indicator_opacity_set(ad->win, ELM_WIN_INDICATOR_OPAQUE);
+    evas_object_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND,
+            EVAS_HINT_EXPAND);
+    elm_win_resize_object_add(ad->win, ad->conform);
+    evas_object_show(ad->conform);
+
+    /* Naviframe */
+    ad->nf = elm_naviframe_add(ad->conform);
+    elm_object_content_set(ad->conform, ad->nf);
+    evas_object_show(ad->nf);
+
+    /* Box */
+    ad->box = elm_box_add(ad->nf);
+
+    /* Genlist */
+    ad->genlist = elm_genlist_add(ad->box);
+    elm_genlist_homogeneous_set(ad->genlist, EINA_TRUE);
+
+    /* Radio */
+    Evas_Object *radio_main = elm_radio_add(ad->genlist);
+    elm_radio_state_value_set(radio_main, 0);
+    elm_radio_value_set(radio_main, 0);
+    evas_object_data_set(ad->genlist, "radio_main", radio_main);
+
+    evas_object_size_hint_weight_set(ad->genlist, EVAS_HINT_EXPAND,
+            EVAS_HINT_EXPAND);
+    evas_object_size_hint_align_set(ad->genlist, EVAS_HINT_FILL,
+            EVAS_HINT_FILL);
+    evas_object_show(ad->genlist);
+    elm_box_pack_end(ad->box, ad->genlist);
+
+    //~ /* Button */ // TODO check button visibility
+    //~ ad->btn = elm_button_add(ad->box);
+    //~ elm_object_text_set(ad->btn, "OK");
+    //~ evas_object_size_hint_weight_set(ad->btn, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+    //~ evas_object_size_hint_align_set(ad->btn, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+    //~ Evas_Object *btn_bg = elm_bg_add(ad->btn);
+    //~ elm_bg_color_set(btn_bg, 90, 160, 200);
+
+    //~ evas_object_smart_callback_add(ad->btn, "clicked", btn_clicked_cb, ad);
+    //~ evas_object_show(ad->btn);
+    //~ elm_box_pack_end(ad->box, ad->btn);
+
+
+    elm_naviframe_item_push(ad->nf, "Select Authenticator",
+            NULL, NULL, ad->box, NULL);
+
+    /* Keep window hidden after base gui is set up */
     //evas_object_hide(ad->win);
-    
+
 }
 
 static bool
@@ -559,14 +632,14 @@ ui_app_lang_changed(app_event_info_h event_info, void *user_data)
     system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);
     elm_language_set(locale);
     free(locale);
-               return;
-       }
+    return;
+}
 
 static void
 ui_app_orient_changed(app_event_info_h event_info, void *user_data)
 {
-               return;
-       }
+    return;
+}
 
 static void
 ui_app_region_changed(app_event_info_h event_info, void *user_data)
@@ -576,8 +649,7 @@ ui_app_region_changed(app_event_info_h event_info, void *user_data)
 static void
 ui_app_low_battery(app_event_info_h event_info, void *user_data)
 {
-
-       }
+}
 
 static void
 ui_app_low_memory(app_event_info_h event_info, void *user_data)
index ecb3c9e..991f809 100644 (file)
@@ -8,7 +8,11 @@ License:    Apache-2.0
 Source0:    fido-client-%{version}.tar.gz
 Source1:    org.tizen.fido.service
 Source2:    org.tizen.fido.conf
+%if "%{?tizen_version}" == "3.0"
 Source3:    fido.service
+%else
+Source3:    org.tizen.fido.service
+%endif
 
 Source4:    org.tizen.dummyasm.service
 Source5:    org.tizen.dummyasm.conf
@@ -17,12 +21,16 @@ BuildRequires:  cmake
 BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(capi-base-common)
-BuildRequires: pkgconfig(glib-2.0) >= 2.26
+BuildRequires:  pkgconfig(glib-2.0) >= 2.26
 BuildRequires:  pkgconfig(gio-unix-2.0)
+
+%if "%{?tizen_version}" == "3.0"
 BuildRequires:  pkgconfig(libtzplatform-config)
 BuildRequires:  pkgconfig(cynara-client)
 BuildRequires:  pkgconfig(cynara-session)
 BuildRequires:  pkgconfig(cynara-creds-gdbus)
+%endif
+
 BuildRequires:  pkgconfig(pkgmgr-info)
 BuildRequires:  pkgconfig(aul)
 BuildRequires:  pkgconfig(json-glib-1.0)
@@ -49,6 +57,7 @@ Requires:   %{name} = %{version}-%{release}
 %description devel
 Development files for %{name}
 
+%if "%{?tizen_version}" == "3.0"
 %define _pkg_dir                %{TZ_SYS_RO_APP}/org.tizen.fidosvcui
 %define _bin_dir                %{_pkg_dir}/bin
 %define _lib_dir                %{_pkg_dir}/lib
@@ -56,6 +65,7 @@ Development files for %{name}
 %define _locale_dir             %{_res_dir}/locale
 %define _manifest_dir           %{TZ_SYS_RO_PACKAGES}
 %define _icon_dir               %{TZ_SYS_RO_ICONS}/default/small
+%endif
 
 %prep
 %setup -q
@@ -69,6 +79,13 @@ export FFLAGS="$FFLAGS -DTIZEN_DEBUG_ENABLE"
 
 export CFLAGS="${CFLAGS} -fPIC -fvisibility=hidden"
 
+%if "%{?tizen_version}" == "3.0"
+_JSON_BUILDER="YES"
+%else
+_JSON_BUILDER="NO"
+%endif
+
+%if "%{?tizen_version}" == "3.0"
 cmake . \
 -DCMAKE_INSTALL_PREFIX=%{_prefix} \
 -DLIBDIR=%{_libdir} \
@@ -77,10 +94,20 @@ cmake . \
 -DRES_DIR=%{_res_dir} \
 -DLOCALE_DIR=%{_locale_dir} \
 -DMANIFEST_DIR=%{_manifest_dir} \
--DICON_DIR=%{_icon_dir}
+-DICON_DIR=%{_icon_dir} \
+-DUSE_JSON_BUILDER:BOOL=${_JSON_BUILDER}
+
+%else
+cmake . \
+-DCMAKE_INSTALL_PREFIX=%{_prefix} \
+-DLIBDIR=%{_libdir} \
+-DINCLUDEDIR=%{_includedir} \
+-DUSE_JSON_BUILDER:BOOL=${_JSON_BUILDER}
+%endif
 
 make %{?jobs:-j%jobs}
 
+%if "%{?tizen_version}" == "3.0"
 %install
 rm -rf %{buildroot}
 
@@ -106,6 +133,26 @@ mkdir -p %{buildroot}%{_unitdir}/multi-user.target.wants
 install -m 644 %SOURCE4 %{buildroot}%{_unitdir}/org.tizen.dummyasm.service
 %install_service multi-user.target.wants org.tizen.dummyasm.service
 
+%else
+%install
+rm -rf %{buildroot}
+
+%make_install
+
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+cp -af %{SOURCE1} %{buildroot}%{_libdir}/systemd/system/
+
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+ln -s %SOURCE3 %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/org.tizen.fido.service
+
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+cp -af %{SOURCE4} %{buildroot}%{_libdir}/systemd/system/
+
+mkdir -p %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants
+ln -s %SOURCE4 %{buildroot}%{_libdir}/systemd/system/multi-user.target.wants/org.tizen.dummyasm.service
+%endif
+
+
 install -m 0644  test/Dummy_ASM_DBUS/dummy_asm.json %{buildroot}%{_libdir}/fido/asm/dummy_asm.json
 
 %make_install
@@ -122,12 +169,24 @@ chsmack -a '_' %{_libdir}/fido/asm/
 %files
 %{_libdir}/*.so.*
 %manifest fido.manifest
+
+%if "%{?tizen_version}" == "3.0"
 %config %{_sysconfdir}/dbus-1/system.d/org.tizen.fido.conf
+%endif
+
 %{_bindir}/fido-service
+
+%if "%{?tizen_version}" == "3.0"
 %attr(0644,root,root) %{_unitdir}/fido.service
 %attr(0644,root,root) %{_unitdir}/multi-user.target.wants/fido.service
 %attr(0644,root,root) /usr/share/dbus-1/system-services/org.tizen.fido.service
 
+%else
+%{_libdir}/systemd/system/org.tizen.fido.service
+%{_libdir}/systemd/system/multi-user.target.wants/org.tizen.fido.service
+%{_datadir}/dbus-1/services/org.tizen.fido.service
+%endif
+
 %files devel
 %defattr(-,root,root,-)
 %{_libdir}/*.so
@@ -143,17 +202,21 @@ chsmack -a '_' %{_libdir}/fido/asm/
 Summary:    FIDO Service UI
 Group:       Social & Content/API
 
-BuildRequires: cmake 
-BuildRequires: pkgconfig(capi-appfw-application)
-BuildRequires: pkgconfig(capi-system-system-settings)
-BuildRequires: pkgconfig(elementary)
-BuildRequires: pkgconfig(efl-extension)
-BuildRequires: pkgconfig(dlog)
+BuildRequires:  cmake
+BuildRequires:  pkgconfig(capi-appfw-application)
+BuildRequires:  pkgconfig(capi-system-system-settings)
+BuildRequires:  pkgconfig(elementary)
+BuildRequires:  pkgconfig(efl-extension)
+BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(bundle)
-BuildRequires: pkgconfig(json-glib-1.0)
-BuildRequires: pkgconfig(glib-2.0) >= 2.26
+BuildRequires:  pkgconfig(json-glib-1.0)
+BuildRequires:  pkgconfig(glib-2.0) >= 2.26
 BuildRequires:  pkgconfig(gio-unix-2.0)
+
+%if "%{?tizen_version}" == "3.0"
 BuildRequires:  pkgconfig(libtzplatform-config)
+%endif
+
 Requires: fido-client
 
 %description -n org.tizen.fidosvcui
@@ -161,10 +224,20 @@ FIDO Service UI provides Authenticator selection UI.
 
 %files -n org.tizen.fidosvcui
 %defattr(-,root,root,-)
+
+%if "%{?tizen_version}" == "3.0"
 %manifest org.tizen.fidosvcui.manifest
 %{TZ_SYS_RO_APP}/org.tizen.fidosvcui/bin/*
-%{TZ_SYS_SHARE}/packages/org.tizen.fidosvcui.xml
-%{TZ_SYS_SHARE}/icons/default/small/org.tizen.fidosvcui.png
+%{TZ_SYS_RO_PACKAGES}/org.tizen.fidosvcui.xml
+%{TZ_SYS_RO_ICONS}/default/small/org.tizen.fidosvcui.png
+
+%else
+%manifest org.tizen.fidosvcui.manifest
+/usr/apps/org.tizen.fidosvcui/bin/*
+##/usr/apps/org.tizen.fidosvcui/res/*
+/usr/share/packages/org.tizen.fidosvcui.xml
+/usr/share/icons/default/small/org.tizen.fidosvcui.png
+%endif
 
 #################################################################################
 # FIDO Dummy ASM
@@ -181,7 +254,11 @@ BuildRequires: pkgconfig(dlog)
 BuildRequires: pkgconfig(json-glib-1.0)
 BuildRequires: pkgconfig(glib-2.0) >= 2.26
 BuildRequires: pkgconfig(gio-unix-2.0)
-BuildRequires: pkgconfig(libtzplatform-config)
+
+%if "%{?tizen_version}" == "3.0"
+BuildRequires:  pkgconfig(libtzplatform-config)
+%endif
+
 Requires: fido-client
 
 %description -n dummyasm
@@ -189,9 +266,19 @@ This is a dummy ASM for testing FIDO client.
 
 %files -n dummyasm
 %manifest dummyasm.manifest
+
+%if "%{?tizen_version}" == "3.0"
 %config %{_sysconfdir}/dbus-1/system.d/org.tizen.dummyasm.conf
 %{_bindir}/dummyasm-service
 %attr(0644,root,root) %{_unitdir}/org.tizen.dummyasm.service
 %attr(0644,root,root) %{_unitdir}/multi-user.target.wants/org.tizen.dummyasm.service
 %attr(0644,root,root) /usr/share/dbus-1/system-services/org.tizen.dummyasm.service
 %{_libdir}/fido/asm/dummy_asm.json
+
+%else
+%{_bindir}/dummyasm-service
+%attr(0644,root,root) %{_libdir}/systemd/system/org.tizen.dummyasm.service
+%attr(0644,root,root) %{_libdir}/systemd/system/multi-user.target.wants/org.tizen.dummyasm.service
+%attr(0644,root,root) %{_datadir}/dbus-1/services/org.tizen.dummyasm.service
+%{_libdir}/fido/asm/dummy_asm.json
+%endif
index 015a31e..af57f99 100644 (file)
@@ -1,6 +1,8 @@
 SET(SVC_DAEMON fido-service)
 
 INCLUDE(FindPkgConfig)
+
+if(USE_JSON_BUILDER)
 pkg_check_modules(SERVER_pkgs REQUIRED
                 dlog
                 glib-2.0
@@ -8,23 +10,38 @@ pkg_check_modules(SERVER_pkgs REQUIRED
                 capi-base-common
                 json-glib-1.0
                 capi-appfw-application
-               aul
+                aul
                 libsoup-2.4
                 capi-appfw-app-manager
                 openssl
                 bundle
-               cynara-client
-               cynara-session
-               cynara-creds-gdbus
-               libtzplatform-config
+                cynara-client
+                cynara-session
+                cynara-creds-gdbus
+                libtzplatform-config
 )
+else()
+pkg_check_modules(SERVER_pkgs REQUIRED
+                dlog
+                glib-2.0
+                gio-unix-2.0
+                capi-base-common
+                json-glib-1.0
+                capi-appfw-application
+                aul
+                libsoup-2.4
+                capi-appfw-app-manager
+                openssl
+                bundle
+)
+endif()
 
 FOREACH(flag ${SERVER_pkgs_CFLAGS})
-       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
 ENDFOREACH(flag)
 
 SET(SERVER_SRCS
-       fido_server.c
+        fido_server.c
         fido_asm_plugin_manager.c
         fido_uaf_policy_checker.c
         fido_selection_ui_adaptor.c
@@ -42,7 +59,7 @@ ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_SOURCE_DIR}/common/fido-stub.c ${CMAKE_SOURCE_
 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/common/
 COMMAND gdbus-codegen --interface-prefix org.tizen. --generate-c-code fido-stub ${CMAKE_SOURCE_DIR}/common/dbus_interfaces/fido.xml 
 COMMENT "Generating FIDO GDBus stubs........................")
-       
+
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror")
 SET(CMAKE_LDFLAGS "-Wl,-zdefs")
 
@@ -54,3 +71,9 @@ TARGET_LINK_LIBRARIES(${SVC_DAEMON} ${SERVER_pkgs_LDFLAGS})
 
 INSTALL(TARGETS ${SVC_DAEMON} DESTINATION bin)
 
+if(USE_JSON_BUILDER)
+add_definitions(-DWITH_JSON_BUILDER)
+else()
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/packaging/org.tizen.fido.service DESTINATION share/dbus-1/services)
+endif()
+
index 7046163..6ed3177 100644 (file)
@@ -284,11 +284,19 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
 
     soup_uri_free(parsed_uri);
 
+#ifdef WITH_JSON_HANDLER
     SoupSession *session = soup_session_new_with_options(
                 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_PROXY_RESOLVER_DEFAULT,
                 SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE,
                 SOUP_SESSION_TIMEOUT, _MAX_NW_TIME_OUT,
                 NULL);
+#else
+    SoupSession *session = soup_session_async_new_with_options(
+                SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_PROXY_RESOLVER_DEFAULT,
+                SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE,
+                SOUP_SESSION_TIMEOUT, _MAX_NW_TIME_OUT,
+                NULL);
+#endif
 
     bool ssl_strict = FALSE;//changed to make sure https cert errors dont occur, only for testing
     g_object_set(session, "ssl-strict", ssl_strict, NULL);
index fa4d08f..0454ae8 100644 (file)
@@ -14,6 +14,8 @@
  * limitations under the License.
  *
  */
+#include <sys/types.h>
+#include <dirent.h>
 
 #include <app.h>
 #include <stdio.h>
index 528c8a0..ffbc298 100644 (file)
 #include "fido_privilege_checker.h"
 #include "fido_logs.h"
 
+#ifdef WITH_JSON_BUILDER
 #include <cynara-client.h>
 #include <cynara-session.h>
 #include <cynara-creds-gdbus.h>
+static cynara *__cynara = NULL;
+#endif
 
 #define _DISABLE_PRIV_CHECK
 
-static cynara *__cynara = NULL;
+#ifdef WITH_JSON_BUILDER
 
 static guint
 _get_client_pid(GDBusMethodInvocation* invoc)
 {
-       const char *name = NULL;
-       name = g_dbus_method_invocation_get_sender(invoc);
-       if (name == NULL)
-       {
-               _ERR("g_dbus_method_invocation_get_sender failed");
-               return -1;
-       }
-       _INFO("sender=[%s]", name);
-
-
-       guint pid = -1;
-       GError *error = NULL;
-       GVariant *_ret;
-
-       _INFO("calling GetConnectionUnixProcessID");
-
-       GDBusConnection* conn = g_dbus_method_invocation_get_connection(invoc);
-       _ret = g_dbus_connection_call_sync(conn,
-                       "org.freedesktop.DBus",
-                       "/org/freedesktop/DBus",
-                       "org.freedesktop.DBus",
-                       "GetConnectionUnixProcessID",
-                       g_variant_new("(s)", name),
-                       NULL,
-                       G_DBUS_CALL_FLAGS_NONE,
-                       -1,
-                       NULL,
-                       &error);
-
-       if (_ret != NULL) {
-               g_variant_get(_ret, "(u)", &pid);
-               g_variant_unref(_ret);
-       }
-
-       _INFO("process Id = [%u]", pid);
-       return pid;
+    const char *name = NULL;
+    name = g_dbus_method_invocation_get_sender(invoc);
+    if (name == NULL)
+    {
+        _ERR("g_dbus_method_invocation_get_sender failed");
+        return -1;
+    }
+    _INFO("sender=[%s]", name);
+
+
+    guint pid = -1;
+    GError *error = NULL;
+    GVariant *_ret;
+
+    _INFO("calling GetConnectionUnixProcessID");
+
+    GDBusConnection* conn = g_dbus_method_invocation_get_connection(invoc);
+    _ret = g_dbus_connection_call_sync(conn,
+            "org.freedesktop.DBus",
+            "/org/freedesktop/DBus",
+            "org.freedesktop.DBus",
+            "GetConnectionUnixProcessID",
+            g_variant_new("(s)", name),
+            NULL,
+            G_DBUS_CALL_FLAGS_NONE,
+            -1,
+            NULL,
+            &error);
+
+    if (_ret != NULL) {
+        g_variant_get(_ret, "(u)", &pid);
+        g_variant_unref(_ret);
+    }
+
+    _INFO("process Id = [%u]", pid);
+    return pid;
 }
 
 static int
 __check_privilege_by_cynara(const char *client, const char *session, const char *user, const char *privilege)
 {
-       int ret;
-       char err_buf[128] = {0,};
-
-       ret = cynara_check(__cynara, client, session, user, privilege);
-       switch (ret) {
-               case CYNARA_API_ACCESS_ALLOWED:
-                       _DBG("cynara_check success");
-                       return FIDO_ERROR_NONE;
-
-               case CYNARA_API_ACCESS_DENIED:
-                       _ERR("cynara_check permission deined, privilege=%s, error = CYNARA_API_ACCESS_DENIED", privilege);
-                       return FIDO_ERROR_PERMISSION_DENIED;
-
-               default:
-                       cynara_strerror(ret, err_buf, sizeof(err_buf));
-                       _ERR("cynara_check error : %s, privilege=%s, ret = %d", err_buf, privilege, ret);
-                       return FIDO_ERROR_PERMISSION_DENIED;
-       }
+    #ifdef WITH_JSON_BUILDER
+
+    int ret;
+    char err_buf[128] = {0,};
+
+    ret = cynara_check(__cynara, client, session, user, privilege);
+    switch (ret) {
+        case CYNARA_API_ACCESS_ALLOWED:
+            _DBG("cynara_check success");
+            return FIDO_ERROR_NONE;
+
+        case CYNARA_API_ACCESS_DENIED:
+            _ERR("cynara_check permission deined, privilege=%s, error = CYNARA_API_ACCESS_DENIED", privilege);
+            return FIDO_ERROR_PERMISSION_DENIED;
+
+        default:
+            cynara_strerror(ret, err_buf, sizeof(err_buf));
+            _ERR("cynara_check error : %s, privilege=%s, ret = %d", err_buf, privilege, ret);
+            return FIDO_ERROR_PERMISSION_DENIED;
+    }
+
+    return FIDO_ERROR_NONE;
+    #endif
+
+    return FIDO_ERROR_NONE;
 }
 
 static int
 __get_information_for_cynara_check(GDBusMethodInvocation *invocation, char **client, char **user, char **session)
 {
-       GDBusConnection *gdbus_conn = NULL;
-       char* sender = NULL;
-       int ret = -1;
-
-       gdbus_conn = g_dbus_method_invocation_get_connection(invocation);
-       if(gdbus_conn == NULL) {
-               _ERR("g_dbus_method_invocation_get_connection failed");
-               return -1;
-       }
-
-       sender = (char*) g_dbus_method_invocation_get_sender(invocation);
-       if (sender == NULL) {
-               _ERR("g_dbus_method_invocation_get_sender failed");
-               return -1;
-       }
-
-       ret = cynara_creds_gdbus_get_user(gdbus_conn, sender, USER_METHOD_DEFAULT, user);
-       if (ret != CYNARA_API_SUCCESS) {
-               _ERR("cynara_creds_gdbus_get_user failed, ret = %d", ret);
-               return -1;
-       }
-
-       ret = cynara_creds_gdbus_get_client(gdbus_conn, sender, CLIENT_METHOD_DEFAULT, client);
-       if (ret != CYNARA_API_SUCCESS) {
-               _ERR("cynara_creds_gdbus_get_client failed, ret = %d", ret);
-               return -1;
-       }
-
-       guint pid = _get_client_pid(invocation);
-       _INFO("client Id = [%u]", pid);
-
-       *session = cynara_session_from_pid(pid);
-       if (*session == NULL) {
-               _ERR("cynara_session_from_pid failed");
-               return -1;
-       }
-       return FIDO_ERROR_NONE;
+    #ifdef WITH_JSON_BUILDER
+
+    GDBusConnection *gdbus_conn = NULL;
+    char* sender = NULL;
+    int ret = -1;
+
+    gdbus_conn = g_dbus_method_invocation_get_connection(invocation);
+    if(gdbus_conn == NULL) {
+        _ERR("g_dbus_method_invocation_get_connection failed");
+        return -1;
+    }
+
+    sender = (char*) g_dbus_method_invocation_get_sender(invocation);
+    if (sender == NULL) {
+        _ERR("g_dbus_method_invocation_get_sender failed");
+        return -1;
+    }
+
+    ret = cynara_creds_gdbus_get_user(gdbus_conn, sender, USER_METHOD_DEFAULT, user);
+    if (ret != CYNARA_API_SUCCESS) {
+        _ERR("cynara_creds_gdbus_get_user failed, ret = %d", ret);
+        return -1;
+    }
+
+    ret = cynara_creds_gdbus_get_client(gdbus_conn, sender, CLIENT_METHOD_DEFAULT, client);
+    if (ret != CYNARA_API_SUCCESS) {
+        _ERR("cynara_creds_gdbus_get_client failed, ret = %d", ret);
+        return -1;
+    }
+
+    guint pid = _get_client_pid(invocation);
+    _INFO("client Id = [%u]", pid);
+
+    *session = cynara_session_from_pid(pid);
+    if (*session == NULL) {
+        _ERR("cynara_session_from_pid failed");
+        return -1;
+    }
+    return FIDO_ERROR_NONE;
+    #endif
+
+    return FIDO_ERROR_NONE;
 }
+#endif
 
 bool
 is_allowed_to_call(GDBusMethodInvocation *invocation, const char* privilege)
 {
-       int ret = -1;
-
-       if (__cynara == NULL) {
-               ret = cynara_initialize(&__cynara, NULL);
-               if(ret != CYNARA_API_SUCCESS) {
-                       _ERR("CYNARA Initialization fail");
-                       return false;
-               }
-       }
-
-       char *client = NULL;
-       char *session = NULL;
-       char *user = NULL;
-
-       ret = __get_information_for_cynara_check(invocation, &client, &user, &session);
-       if ( ret != FIDO_ERROR_NONE) {
-               _ERR("__get_information_for_cynara_check failed");
-               g_free(client);
-               g_free(user);
-               SAFE_DELETE(session);
-
-               return false;
-       }
-
-       ret = __check_privilege_by_cynara(client, session, user, privilege);
-
-       /*TODO enable after smack is defined*/
-#ifndef _DISABLE_PRIV_CHECK
-       if ( ret != FIDO_ERROR_NONE) {
-               _ERR("__check_privilege_by_cynara failed, ret = %d", ret);
-               g_free(client);
-               g_free(user);
-               SAFE_DELETE(session);
-
-               return false;
-       }
-#endif
-       g_free(client);
-       g_free(user);
-       SAFE_DELETE(session);
-
-       return true;
+    #ifdef WITH_JSON_BUILDER
+
+    int ret = -1;
+
+    if (__cynara == NULL) {
+        ret = cynara_initialize(&__cynara, NULL);
+        if(ret != CYNARA_API_SUCCESS) {
+            _ERR("CYNARA Initialization fail");
+            return false;
+        }
+    }
+
+    char *client = NULL;
+    char *session = NULL;
+    char *user = NULL;
+
+    ret = __get_information_for_cynara_check(invocation, &client, &user, &session);
+    if ( ret != FIDO_ERROR_NONE) {
+        _ERR("__get_information_for_cynara_check failed");
+        g_free(client);
+        g_free(user);
+        SAFE_DELETE(session);
+
+        return false;
+    }
+
+    ret = __check_privilege_by_cynara(client, session, user, privilege);
+
+    /*TODO enable after smack is defined*/
+    #ifndef _DISABLE_PRIV_CHECK
+    if ( ret != FIDO_ERROR_NONE) {
+        _ERR("__check_privilege_by_cynara failed, ret = %d", ret);
+        g_free(client);
+        g_free(user);
+        SAFE_DELETE(session);
+
+        return false;
+    }
+    #endif
+    g_free(client);
+    g_free(user);
+    SAFE_DELETE(session);
+
+    return true;
+    #endif
+
+    return true;
 }
index 96a60f8..bf903fc 100644 (file)
@@ -17,16 +17,16 @@ ENDFOREACH(flag)
 
 INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/common)
 
-ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_SOURCE_DIR}/common/dummy-asm-stub.c ${CMAKE_SOURCE_DIR}/common/dummy-asm-stub.h 
+ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_SOURCE_DIR}/common/dummy-asm-stub.c ${CMAKE_SOURCE_DIR}/common/dummy-asm-stub.h
 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/common/
 COMMAND gdbus-codegen --interface-prefix org.tizen. --generate-c-code dummy-asm-stub ${CMAKE_SOURCE_DIR}/common/dbus_interfaces/dummyasm.xml 
 COMMENT "Generating Dummy ASM GDBus stubs........................")
-       
+
 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror")
 SET(CMAKE_LDFLAGS "-Wl,-zdefs")
 
 SET(DUMMY_ASM_SRCS
-       dummy_asm_server.c
+        dummy_asm_server.c
 )
 
 ADD_EXECUTABLE(${ASM_DAEMON} ${DUMMY_ASM_SRCS} ${CMAKE_SOURCE_DIR}/common/dummy-asm-stub.c)
@@ -36,4 +36,10 @@ ADD_DEPENDENCIES(${PROJECT_NAME} ${CMAKE_SOURCE_DIR}/common/dummy-asm-stub.c)
 TARGET_LINK_LIBRARIES(${ASM_DAEMON} ${ASM_PKGS_LDFLAGS})
 
 INSTALL(TARGETS ${ASM_DAEMON} DESTINATION bin)
+
+if(USE_JSON_BUILDER)
+else()
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/packaging/org.tizen.dummyasm.service DESTINATION share/dbus-1/services)
+endif()
+
 INSTALL(FILES ${CMAKE_SOURCE_DIR}/test/Dummy_ASM_DBUS/dummy_asm.json DESTINATION ${LIBDIR}/fido/asm/)
index 4ea65f4..9cb7263 100644 (file)
                 [
                     {
                         "aaid": [
-                           "0000#C001"
+                            "0001#8001"
                         ]
                     }
                 ],
                 [
                     {
                         "aaid": [
-                           "53EC#3101"
+                            "DDDD#F001"
                         ]
                     }
                 ]
index 9ab6684..c330f4e 100644 (file)
@@ -10,7 +10,7 @@
         },
         "authenticators": [
             {
-               "aaid": "53EC#3101",
+                "aaid": "0001#8001",
                 "keyID": "uWrbo_8JI1HmPESrNAStTVV8ZbBrzLsf_kZu1QKX2YY"
             }
         ]
index c07b6d1..c3570a7 100644 (file)
                 [
                     {
                         "aaid": [
-                           "0000#C001"
+                            "0001#8001"
                         ]
                     }
                 ],
                 [
                     {
                         "aaid": [
-                           "53EC#3101"
+                            "DDDD#F001"
                         ]
                     }
                 ]
index f5e33e8..b0216d0 100644 (file)
@@ -6,8 +6,8 @@
 #include <stdlib.h>
 #include <glib.h>
 
-static char *json_reg = "[ { \"header\": { \"upv\": { \"major\": 1, \"minor\": 0 },\"op\":\"Reg\", \"serverData\": \"nwV8EPqS5raZdAgH3GD9Z-ytCA9MkiiWaCsr1GHHNJ2yUh3HaV1HHxd4Z67FefJOD5sQYZvipfg5BavhdWPMecD2SH39aJixoXN9ZaNwRlcftJe9WbtPNDC9q5V9WX7Z5jCwkAwehcI\" }, \"challenge\": \"9pIcUwwrY5eD9o3OwfhkeHLnoIl0vaeJUbxSHMe_XgE\", \"username\":\"ryan\", \"policy\": { \"accepted\": [ [ { \"aaid\": [ \"0001#8001\" ] } ], [ { \"aaid\": [ \"53EC#3101\" ] } ] ] } } ]";
-static char *json_auth = "[ { \"header\": { \"upv\": { \"major\": 1, \"minor\": 0 }, \"op\": \"Auth\", \"serverData\": \"emKubKMS8RxYOth7J8enT_x7dQWBaO1CiC0fGmSEhX56kq2RYo1LRpwvfHlzYRI3p9Ay-l4zJcV3lX6rQ0CYNWi5nNDabClFm3k0pPj0kX5V-db9ejN_05y2J6wqztSD\" }, \"challenge\": \"1AM2yZY4-9SG4Ns7-hMdB8IV_FTDKFFiUqNJNVbsVoo\", \"transaction\": [ { \"contentType\": \"text/plain\", \"content\": \"VHJhbnNhY3Rpb24gQ29udGVudCBmb3IgVGVzdC4\", \"tcDisplayPNGCharacteristics\": [ { \"width\": 320, \"height\": 240, \"bitDepth\": 16, \"colorType\": 2, \"compression\": 0, \"filter\": 0, \"interlace\": 0 } ] } ], \"policy\": { \"accepted\": [ [ { \"aaid\": [ \"0001#8001\" ] } ], [ { \"aaid\": [ \"53EC#3101\" ] } ] ] } } ]";
+static char *json_reg = "[ { \"header\": { \"upv\": { \"major\": 1, \"minor\": 0 },\"op\":\"Reg\", \"serverData\": \"nwV8EPqS5raZdAgH3GD9Z-ytCA9MkiiWaCsr1GHHNJ2yUh3HaV1HHxd4Z67FefJOD5sQYZvipfg5BavhdWPMecD2SH39aJixoXN9ZaNwRlcftJe9WbtPNDC9q5V9WX7Z5jCwkAwehcI\" }, \"challenge\": \"9pIcUwwrY5eD9o3OwfhkeHLnoIl0vaeJUbxSHMe_XgE\", \"username\":\"ryan\", \"policy\": { \"accepted\": [ [ { \"aaid\": [ \"0001#8001\" ] } ], [ { \"aaid\": [ \"DDDD#F001\" ] } ] ] } } ]";
+static char *json_auth = "[ { \"header\": { \"upv\": { \"major\": 1, \"minor\": 0 }, \"op\": \"Auth\", \"serverData\": \"emKubKMS8RxYOth7J8enT_x7dQWBaO1CiC0fGmSEhX56kq2RYo1LRpwvfHlzYRI3p9Ay-l4zJcV3lX6rQ0CYNWi5nNDabClFm3k0pPj0kX5V-db9ejN_05y2J6wqztSD\" }, \"challenge\": \"1AM2yZY4-9SG4Ns7-hMdB8IV_FTDKFFiUqNJNVbsVoo\", \"transaction\": [ { \"contentType\": \"text/plain\", \"content\": \"VHJhbnNhY3Rpb24gQ29udGVudCBmb3IgVGVzdC4\", \"tcDisplayPNGCharacteristics\": [ { \"width\": 320, \"height\": 240, \"bitDepth\": 16, \"colorType\": 2, \"compression\": 0, \"filter\": 0, \"interlace\": 0 } ] } ], \"policy\": { \"accepted\": [ [ { \"aaid\": [ \"0001#8001\" ] } ], [ { \"aaid\": [ \"DDDD#F001\" ] } ] ] } } ]";
 static char *json_dereg = "[ { \"header\": { \"upv\": { \"major\": \"1\", \"minor\": \"0\" }, \"op\": \"Dereg\" }, \"authenticators\": [ { \"aaid\": \"0001#8001\", \"keyID\": \"uWrbo_8JI1HmPESrNAStTVV8ZbBrzLsf_kZu1QKX2YY\" } ] } ]";
 
 void get_user_choice(void);