From 9cd045f98bc3e0b0b2e660edeb238c9b5c7961eb Mon Sep 17 00:00:00 2001 From: "sajal.j" Date: Fri, 18 Mar 2016 18:32:15 +0530 Subject: [PATCH] Ported for 2.3.1 wearable profile Change-Id: I63ecc417f79688006e1051fadb4e7ba791a3453e --- CMakeLists.txt | 1 + common/fido_json_handler.c | 1080 +++++++++++++++++++++++++++++-- common/fido_uaf_types.h | 4 + fido_svc_ui/CMakeLists.txt | 61 +- fido_svc_ui/fido_ui_server.c | 482 ++++++++------ packaging/fido-client.spec | 113 +++- server/CMakeLists.txt | 39 +- server/fido_app_id_handler.c | 8 + server/fido_asm_plugin_manager.c | 2 + server/fido_privilege_checker.c | 289 +++++---- test/Dummy_ASM_DBUS/CMakeLists.txt | 12 +- test/Fido_Sample_RPM/res/auth_req.json | 4 +- test/Fido_Sample_RPM/res/dereg_req.json | 2 +- test/Fido_Sample_RPM/res/reg_req.json | 4 +- test/shell_tc/fido_shell_tc.c | 4 +- 15 files changed, 1662 insertions(+), 443 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ce5570c..54f1735 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) + diff --git a/common/fido_json_handler.c b/common/fido_json_handler.c index 2b41500..3f108cf 100644 --- a/common/fido_json_handler.c +++ b/common/fido_json_handler.c @@ -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" @@ -106,21 +106,21 @@ #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" @@ -130,6 +130,7 @@ #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, ®ister_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; + } diff --git a/common/fido_uaf_types.h b/common/fido_uaf_types.h index b07e764..65c2312 100755 --- a/common/fido_uaf_types.h +++ b/common/fido_uaf_types.h @@ -21,6 +21,10 @@ #include #include +#ifndef WITH_JSON_BUILDER +#define TIZEN_ERROR_FIDO -0x01030000 +#endif + /** * @addtogroup CAPI_FIDO_MODULE * @{ diff --git a/fido_svc_ui/CMakeLists.txt b/fido_svc_ui/CMakeLists.txt index 5c393fe..f680bdd 100644 --- a/fido_svc_ui/CMakeLists.txt +++ b/fido_svc_ui/CMakeLists.txt @@ -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() diff --git a/fido_svc_ui/fido_ui_server.c b/fido_svc_ui/fido_ui_server.c index 46b6712..b97016a 100644 --- a/fido_svc_ui/fido_ui_server.c +++ b/fido_svc_ui/fido_ui_server.c @@ -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) diff --git a/packaging/fido-client.spec b/packaging/fido-client.spec index ecb3c9e..991f809 100644 --- a/packaging/fido-client.spec +++ b/packaging/fido-client.spec @@ -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 diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt index 015a31e..af57f99 100644 --- a/server/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -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() + diff --git a/server/fido_app_id_handler.c b/server/fido_app_id_handler.c index 7046163..6ed3177 100644 --- a/server/fido_app_id_handler.c +++ b/server/fido_app_id_handler.c @@ -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); diff --git a/server/fido_asm_plugin_manager.c b/server/fido_asm_plugin_manager.c index fa4d08f..0454ae8 100644 --- a/server/fido_asm_plugin_manager.c +++ b/server/fido_asm_plugin_manager.c @@ -14,6 +14,8 @@ * limitations under the License. * */ +#include +#include #include #include diff --git a/server/fido_privilege_checker.c b/server/fido_privilege_checker.c index 528c8a0..ffbc298 100644 --- a/server/fido_privilege_checker.c +++ b/server/fido_privilege_checker.c @@ -18,163 +18,184 @@ #include "fido_privilege_checker.h" #include "fido_logs.h" +#ifdef WITH_JSON_BUILDER #include #include #include +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; } diff --git a/test/Dummy_ASM_DBUS/CMakeLists.txt b/test/Dummy_ASM_DBUS/CMakeLists.txt index 96a60f8..bf903fc 100644 --- a/test/Dummy_ASM_DBUS/CMakeLists.txt +++ b/test/Dummy_ASM_DBUS/CMakeLists.txt @@ -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/) diff --git a/test/Fido_Sample_RPM/res/auth_req.json b/test/Fido_Sample_RPM/res/auth_req.json index 4ea65f4..9cb7263 100644 --- a/test/Fido_Sample_RPM/res/auth_req.json +++ b/test/Fido_Sample_RPM/res/auth_req.json @@ -32,14 +32,14 @@ [ { "aaid": [ - "0000#C001" + "0001#8001" ] } ], [ { "aaid": [ - "53EC#3101" + "DDDD#F001" ] } ] diff --git a/test/Fido_Sample_RPM/res/dereg_req.json b/test/Fido_Sample_RPM/res/dereg_req.json index 9ab6684..c330f4e 100644 --- a/test/Fido_Sample_RPM/res/dereg_req.json +++ b/test/Fido_Sample_RPM/res/dereg_req.json @@ -10,7 +10,7 @@ }, "authenticators": [ { - "aaid": "53EC#3101", + "aaid": "0001#8001", "keyID": "uWrbo_8JI1HmPESrNAStTVV8ZbBrzLsf_kZu1QKX2YY" } ] diff --git a/test/Fido_Sample_RPM/res/reg_req.json b/test/Fido_Sample_RPM/res/reg_req.json index c07b6d1..c3570a7 100644 --- a/test/Fido_Sample_RPM/res/reg_req.json +++ b/test/Fido_Sample_RPM/res/reg_req.json @@ -16,14 +16,14 @@ [ { "aaid": [ - "0000#C001" + "0001#8001" ] } ], [ { "aaid": [ - "53EC#3101" + "DDDD#F001" ] } ] diff --git a/test/shell_tc/fido_shell_tc.c b/test/shell_tc/fido_shell_tc.c index f5e33e8..b0216d0 100644 --- a/test/shell_tc/fido_shell_tc.c +++ b/test/shell_tc/fido_shell_tc.c @@ -6,8 +6,8 @@ #include #include -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); -- 2.7.4