diff --git a/Platform/user/configm/config-server/user_manager_config/user_account_config.c b/Platform/user/configm/config-server/user_manager_config/user_account_config.c index c9fd0d721..54afa520d 100644 --- a/Platform/user/configm/config-server/user_manager_config/user_account_config.c +++ b/Platform/user/configm/config-server/user_manager_config/user_account_config.c @@ -9,6 +9,7 @@ #include "usermanager-server/include/array_index.h" #include "s2j/s2j.h" #include "s2j/s2jdef.h" +#include "database.h" @@ -18,15 +19,420 @@ ret_code user_config_chk(uint source, uint *config_type, pointer output, int *output_len) { ret_code ret = RET_OK; + cJSON *root, *type_json, *data_json; + int fun_type; + + if(NULL == input || NULL == input_len || NULL == output || NULL == output_len) + { + ret = RET_INPUTERR; + //ASSERT_RET(ret); + return ret; + } + + if(*input_len < strlen(input)) + { + ret = RET_INPUTERR; + return ret; + } + + root = cJSON_Parse(input); + if(!root) + { + ret = RET_INPUTERR; + return ret; + } + + type_json = cJSON_GetObjectItem(root, "type"); + if(!type_json) + { + cJSON_Delete(root); + ret = RET_INPUTERR; + return ret; + } + + data_json = cJSON_GetObjectItem(root, "data"); + if(!data_json) + { + cJSON_Delete(root); + ret = RET_INPUTERR; + return ret; + } + + cJSON_Delete(root); + return ret; +} + +/* +* 根据用户uuid查询用户详情-处理 +* iuput格式: +{ + "type": 3, //3:表示根据用户id查询用户详情 + "data": { + "user_id": 2 //用户id,int类型 + } +} + +* output格式: +{ + "retcode": 0, + "message": "查询成功", + "data":[{ + "ID": 2, //用户id + "GID": 3, //用户组id + "uname": "xxx", //用户名 + "gname": "xxx", //用户组名 + "udescription": "xxx", //用户描述 + "multi": 0, + "valid": 0, + "valid_begin_time": "2013-07-04 15:04:23", + "valid_end_time": "2020-07-04 15:04:23" + }] +} + +* 0:成功、1:失败 +*/ +static ret_code user_config_get_detail_proc(uint source, uint config_type, + pointer input, int input_len, + pointer output, int *output_len) +{ + ret_code ret = RET_OK; + char * data_detail = NULL; + char * ret_char = NULL; + int group_uuid; + + /* 解析json串 */ + cJSON * root = cJSON_Parse(input); + cJSON * data = cJSON_GetObjectItem(root, "data"); + if(!data) + { + ret = RET_INPUTERR; + cJSON_Delete(root); + return ret; + } + cJSON * user_uuid = cJSON_GetObjectItem(data, "user_id"); + if(!user_uuid) + { + ret = RET_INPUTERR; + cJSON_Delete(root); + return ret; + } + + /* 执行查询函数 */ + bool ret_get = get_user_detail_by_user_uuid(user_uuid->valueint, &data_detail); + cJSON_Delete(root); + + cJSON * ret_root = cJSON_CreateObject(); + if (NULL == ret_root) + { + UCHAR_FREE(data_detail); + ret = RET_ERR; + return ret; + } + + /* 查询失败 */ + if (!ret_get) + { + cJSON_AddNumberToObject(ret_root, "retcode", 1); + cJSON_AddStringToObject(ret_root, "message", "查询失败"); + cJSON_AddStringToObject(ret_root, "data", ""); + + ret_char = cJSON_PrintUnformatted(ret_root); + memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; + + UCHAR_FREE(data_detail); //释放函数内部申请的内存 + UCHAR_FREE(ret_char); + cJSON_Delete(ret_root); + return ret; + } + + /* 查询成功 */ + cJSON * list_obj = cJSON_Parse(data_detail); + if (NULL == list_obj) + { + UCHAR_FREE(data_detail); //释放函数内部申请的内存 + cJSON_Delete(ret_root); + ret = RET_ERR; + + return ret; + } + + cJSON * list_data = cJSON_GetObjectItem(list_obj, "data"); + if (NULL == list_data) + { + UCHAR_FREE(data_detail); //释放函数内部申请的内存 + cJSON_Delete(ret_root); + cJSON_Delete(list_obj); + ret = RET_ERR; + return ret; + } + + cJSON_AddItemToObject(ret_root, "data", list_data); + cJSON_AddNumberToObject(ret_root, "retcode", 0); + cJSON_AddStringToObject(ret_root, "message", "查询成功"); + + ret_char = cJSON_PrintUnformatted(ret_root); + memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; + + cJSON_DetachItemFromObjectCaseSensitive(list_obj,"data"); + cJSON_DetachItemFromObjectCaseSensitive(ret_root,"data"); + UCHAR_FREE(data_detail); + UCHAR_FREE(ret_char); + cJSON_Delete(list_obj); + cJSON_Delete(ret_root); + + return ret; +} + +/* +* 根据用户名查询用户uuid-处理 +* iuput格式: +{ + "type": 7, //7:表示查询用户名重名 + "data": { + "uname": "xxx" + } +} + +* output格式: +{ + "retcode": 0, + "message": "查询成功", + "data": { + "user_id": 3 //user_id为0时,表示该用户名不存在 + } +} + +* 0:成功、1:失败 +*/ +static ret_code user_config_get_uuid_proc(uint source, uint config_type, + pointer input, int input_len, + pointer output, int *output_len) +{ + ret_code ret = RET_OK; + unsigned short user_uuid; + + cJSON * root = cJSON_Parse(input); + cJSON * data = cJSON_GetObjectItem(root, "data"); + + cJSON * user_name = cJSON_GetObjectItem(data, "uname"); + if (!user_name) + { + cJSON_Delete(root); + ret = RET_ERR; + return ret; + } + + /* 查询操作 */ + bool ret_get = get_user_uuid_by_name(user_name->valuestring, &user_uuid); + cJSON_Delete(root); + + cJSON * ret_root = cJSON_CreateObject(); + if (!ret_root) + { + ret = RET_ERR; + return ret; + } + + if (ret_get) + { + cJSON_AddNumberToObject(ret_root, "retcode", 0); + cJSON_AddStringToObject(ret_root, "message", "查询成功"); + + cJSON * ret_data; + cJSON_AddItemToObject(ret_root, "data", ret_data = cJSON_CreateObject()); + cJSON_AddNumberToObject(ret_data, "user_id", user_uuid); + }else + { + cJSON_AddNumberToObject(ret_root, "retcode", 1); + cJSON_AddStringToObject(ret_root, "message", "查询失败"); + cJSON_AddStringToObject(ret_root, "data", ""); + } + + char * ret_char = cJSON_PrintUnformatted(ret_root); + memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; + + cJSON_Delete(ret_root); + UCHAR_FREE(ret_char); + + return ret; +} + +/* +* 查询用户列表-处理 +* iuput格式: +{ + "type": 4, //4表示查询用户列表 + "data": { + "group_id": 3, //用户组id + "user_name": "xxx", //用户名 + "page_start": 1, //第1页 + "page_counts": 10 //每页10条 + } +} +* output格式: +{ + "retcode": 0, + "message": "查询成功", + "data": [{ + "ID": 2, + "GID": 3, + "uname": "xxx", + "gname": "xxx", + "udescription": "xxx", + "multi": 0, + "valid": 0, + "valid_begin_time": "2013-07-04 15:04:23", + "valid_end_time": "2020-07-04 15:04:23" + } + ] +} +* 0:成功、1:失败 +*/ +static ret_code user_config_get_list_proc(uint source, uint config_type, + pointer input, int input_len, + pointer output, int *output_len) +{ + ret_code ret = RET_OK; + char * data_list = NULL; + char * ret_char = NULL; + int group_uuid; + + /* 解析json串 */ + cJSON * root = cJSON_Parse(input); + cJSON * data = cJSON_GetObjectItem(root, "data"); + if(!data) + { + ret = RET_INPUTERR; + cJSON_Delete(root); + return ret; + } + cJSON * group_id = cJSON_GetObjectItem(data, "group_id"); + if(!group_id) + { + group_uuid = 0; + }else + { + group_uuid = group_id->valueint; + } + + + cJSON * user_name = cJSON_GetObjectItem(data, "user_name"); + if(!user_name) + { + ret = RET_INPUTERR; + cJSON_Delete(root); + return ret; + } + cJSON * page_start = cJSON_GetObjectItem(data, "page_start"); + if(!page_start) + { + ret = RET_INPUTERR; + cJSON_Delete(root); + return ret; + } + cJSON * page_counts = cJSON_GetObjectItem(data, "page_counts"); + if(!page_counts) + { + ret = RET_INPUTERR; + cJSON_Delete(root); + return ret; + } + + /* 执行查询函数 */ + bool ret_get = useraccount_showlist(group_uuid, user_name->valuestring, page_start->valueint, page_counts->valueint, &data_list); + cJSON_Delete(root); + + cJSON * ret_root = cJSON_CreateObject(); + if (NULL == ret_root) + { + UCHAR_FREE(data_list); + ret = RET_ERR; + return ret; + } + + /* 查询失败 */ + if (!ret_get) + { + cJSON_AddNumberToObject(ret_root, "retcode", 1); + cJSON_AddStringToObject(ret_root, "message", "查询失败"); + cJSON_AddStringToObject(ret_root, "data", ""); + + ret_char = cJSON_PrintUnformatted(ret_root); + memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; + + UCHAR_FREE(data_list); + UCHAR_FREE(ret_char); + cJSON_Delete(ret_root); + return ret; + } + + /* 查询成功 */ + cJSON * list_obj = cJSON_Parse(data_list); + if (NULL == list_obj) + { + UCHAR_FREE(data_list); + cJSON_Delete(ret_root); + ret = RET_ERR; + + return ret; + } + + cJSON * list_data = cJSON_GetObjectItem(list_obj, "data"); + if (NULL == list_data) + { + UCHAR_FREE(data_list); + cJSON_Delete(ret_root); + cJSON_Delete(list_obj); + ret = RET_ERR; + return ret; + } + + cJSON_AddItemToObject(ret_root, "data", list_data); + cJSON_AddNumberToObject(ret_root, "retcode", 0); + cJSON_AddStringToObject(ret_root, "message", "查询成功"); + + ret_char = cJSON_PrintUnformatted(ret_root); + memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; + + cJSON_DetachItemFromObjectCaseSensitive(list_obj,"data"); + cJSON_DetachItemFromObjectCaseSensitive(ret_root,"data"); + UCHAR_FREE(data_list); + UCHAR_FREE(ret_char); + cJSON_Delete(list_obj); + cJSON_Delete(ret_root); + return ret; } /* * 新增用户-处理 -* iuput格式:{"type": 0,"data": {"uname": "xxx","gname": "xxx","multi": "0","valid": "1","valid_begin_time": "xx","valid_end_time": "xx"}} -* output格式:{"result": 0,"user_id": 2} +* iuput格式: +{ + "type": 0, //0表示新增用户 + "data": { + "uname": "xxx", //必填 + "gname": "xxx", //必填 + "udesp": "xxx", //选填 + "pwd": "A31as%4Gb", //密码,默认密码 + "multi": 0, //0:允许多人登陆、1:不允许多人登陆 + "valid": 1, //0:永久有效、1:在下面两个时间范围内有效 + "valid_begin_time": "2013-07-04 15:04:23", + "valid_end_time": "2020-07-04 15:04:23" + } +} +* output格式: +{ + "retcode": 0, + "message": "新增成功", + "data": "" //空 +} * 0:成功 -* 1/2/3/4/5:失败,1:用户组名不存在,2:用户名长度不符合,3:用户名中包含特殊字符,4:用户名重名,5:用户数已达到最大 +* 1/2/3/4/5/6/7:失败,1:用户组名不存在、2:用户名长度不符合、3:用户名中包含特殊字符、4:用户名重名、5:用户数已达到最大(最大用户数100)、6:数据库操作失败、7:系统错误 * 备注:当新增失败时,用户id为0 */ static ret_code user_config_add_proc(uint source, uint config_type, @@ -34,12 +440,13 @@ static ret_code user_config_add_proc(uint source, uint config_type, pointer output, int *output_len) { ret_code ret = RET_OK; - cJSON *root, *data, *uname, *gname, *res, *udesp, *multi, *valid, *valid_begin_time, *valid_end_time; - USERADD *add_user_ret; + cJSON *root, *data, *uname, *gname, *res, *pwd, *udesp, *multi, *valid, *valid_begin_time, *valid_end_time; + USERADD add_user_ret; USERLIST *user_account; char *ret_char = NULL; - char *temp_begin_time, *temp_end_time, *temp_udesp; + char *temp_begin_time, *temp_end_time, *temp_udesp, *temp_pwd; int temp_multi, temp_valid; + char *message[] = {"新增成功","用户组名不存在","用户名长度不符合","用户名中包含特殊字符","用户名重名","用户数已达到最大(最大用户数100)","数据库操作失败","系统错误"}; /* 解析json串 */ root = cJSON_Parse(input); @@ -78,8 +485,16 @@ static ret_code user_config_add_proc(uint source, uint config_type, { temp_udesp = udesp->valuestring; } - + pwd = cJSON_GetObjectItem(data, "pwd"); + if(!pwd) + { + temp_pwd = ""; + }else + { + temp_pwd = pwd->valuestring; + } + multi = cJSON_GetObjectItem(data, "multi"); if(!multi) { @@ -124,31 +539,7 @@ static ret_code user_config_add_proc(uint source, uint config_type, } /* 执行操作 */ - add_user_ret = (USERADD*)malloc(sizeof(USERADD)); - if (NULL == add_user_ret) - { - // 记录日志 - ret = RET_ERR; - //ASSERT_RET(ret); - cJSON_Delete(root); - return ret; - } - usermanager_add_user(uname->valuestring, gname->valuestring, temp_udesp, temp_multi, temp_valid, temp_begin_time, temp_end_time, add_user_ret); //新增用户 - - // if(ADDUSER_SUCCESS == add_user_ret->result) - // { - // if(1 == atoi(multi->valuestring)) - // { - // mod_user_line(uname->valuestring, 3, multi->valuestring); - // } - - // if(1 == atoi(valid->valuestring)) - // { - // mod_user_line(uname->valuestring, 4, valid->valuestring); - // mod_user_line(uname->valuestring, 5, valid_begin_time->valuestring); - // mod_user_line(uname->valuestring, 6, valid_end_time->valuestring); - // } - // } + usermanager_add_user(uname->valuestring, gname->valuestring, temp_udesp, temp_pwd, temp_multi, temp_valid, temp_begin_time, temp_end_time, &add_user_ret); //新增用户 /* 处理返回结果 */ res = cJSON_CreateObject(); @@ -158,15 +549,16 @@ static ret_code user_config_add_proc(uint source, uint config_type, // ASSERT_RET(ret); return ret; } - cJSON_AddNumberToObject(res, "result", add_user_ret->result); - cJSON_AddNumberToObject(res, "user_id", add_user_ret->userID); + cJSON_AddNumberToObject(res, "retcode", add_user_ret.result); + cJSON_AddStringToObject(res, "message", message[add_user_ret.result]); + cJSON_AddStringToObject(res, "data", ""); ret_char = cJSON_PrintUnformatted(res); memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; /* 释放内存 */ cJSON_Delete(root); cJSON_Delete(res); - UCHAR_FREE(add_user_ret); UCHAR_FREE(ret_char); return ret; @@ -538,13 +930,6 @@ ret_code user_config_proc(uint source, uint config_type, cJSON *root, *type_json; int fun_type; - if(NULL == input) - { - ret = RET_INPUTERR; - //ASSERT_RET(ret); - return ret; - } - /* 获取对应的函数type */ FUNCTYPE_GET(input, fun_type); @@ -572,6 +957,16 @@ ret_code user_config_proc(uint source, uint config_type, input, input_len, output, output_len); break; + case USER_CONFIG_GET: + ret = user_config_get_detail_proc(source, config_type, + input, input_len, + output, output_len); + break; + case USER_CONFIG_GET_ALL: + ret = user_config_get_list_proc(source, config_type, + input, input_len, + output, output_len); + break; case USER_CONFIG_MOD_LINE: ret = user_config_mod_line_proc(source, config_type, input, input_len, @@ -582,6 +977,11 @@ ret_code user_config_proc(uint source, uint config_type, input, input_len, output, output_len); break; + case USER_CONFIG_GET_UUID: + ret = user_config_get_uuid_proc(source, config_type, + input, input_len, + output, output_len); + break; default: ret = RET_NOTSUPPORT; } diff --git a/Platform/user/configm/config-server/user_manager_config/user_account_config.h b/Platform/user/configm/config-server/user_manager_config/user_account_config.h index 29e357078..1f2b28835 100644 --- a/Platform/user/configm/config-server/user_manager_config/user_account_config.h +++ b/Platform/user/configm/config-server/user_manager_config/user_account_config.h @@ -24,7 +24,7 @@ #define USER_CONFIG_GET_ALL 4 #define USER_CONFIG_MOD_LINE 5 #define USER_CONFIG_MOD_GROUP 6 - +#define USER_CONFIG_GET_UUID 7 /* user account config */ ret_code user_config_chk(uint source, uint *config_type, diff --git a/Platform/user/configm/config-server/user_manager_config/user_group_config.c b/Platform/user/configm/config-server/user_manager_config/user_group_config.c index b21b8954d..1e1e3e279 100644 --- a/Platform/user/configm/config-server/user_manager_config/user_group_config.c +++ b/Platform/user/configm/config-server/user_manager_config/user_group_config.c @@ -17,22 +17,98 @@ ret_code usergroup_config_chk(uint source, uint *config_type, return ret; } +/* +* 根据用户组名查询用户组uuid-处理 +* iuput格式: +{ + "type": 7, //7:表示查询用户组重名 + "data": { + "gname": "xxx" + } +} + +* output格式: +{ + "retcode": 0, + "message": "查询成功", + "data": { + "group_id": 3 //group_id为0时,表示该用户组不存在 + } +} + +* 0:成功、1:失败 +*/ +static ret_code usergroup_config_get_uuid_proc(uint source, uint config_type, + pointer input, int input_len, + pointer output, int *output_len) +{ + ret_code ret = RET_OK; + unsigned short group_uuid; + + cJSON * root = cJSON_Parse(input); + cJSON * data = cJSON_GetObjectItem(root, "data"); + + cJSON * group_name = cJSON_GetObjectItem(data, "gname"); + if (!group_name) + { + cJSON_Delete(root); + ret = RET_ERR; + return ret; + } + + /* 查询操作 */ + bool ret_get = get_group_uuid_by_name(group_name->valuestring, &group_uuid); + cJSON_Delete(root); + + cJSON * ret_root = cJSON_CreateObject(); + if (!ret_root) + { + ret = RET_ERR; + return ret; + } + + if (ret_get) + { + cJSON_AddNumberToObject(ret_root, "retcode", 0); + cJSON_AddStringToObject(ret_root, "message", "查询成功"); + + cJSON * ret_data; + cJSON_AddItemToObject(ret_root, "data", ret_data = cJSON_CreateObject()); + cJSON_AddNumberToObject(ret_data, "user_id", group_uuid); + }else + { + cJSON_AddNumberToObject(ret_root, "retcode", 1); + cJSON_AddStringToObject(ret_root, "message", "查询失败"); + cJSON_AddStringToObject(ret_root, "data", ""); + } + + char * ret_char = cJSON_PrintUnformatted(ret_root); + memcpy(output, ret_char, strlen(ret_char)+1); + *output_len = strlen(ret_char)+1; + + cJSON_Delete(ret_root); + UCHAR_FREE(ret_char); + + return ret; +} + /* * 新增用户组-处理 * input格式:{"type": 0,"data": {"gname": "xxx","gdescription": "xxx"}} * output格式:{"result":0} * 0:成功 -* 1/2/3/4:失败,1:用户组满了、2:用户组名或描述长度不符合要求、3:用户组名中包含特殊字符、4:用户组名重名 +* 1/2/3/4/5:失败,1:用户组已满、2:用户组名或描述长度不符合要求、3:用户组名中包含特殊字符、4:用户组名重名、5:数据库操作失败 */ static ret_code usergroup_config_add_proc(uint source, uint config_type, pointer input, int input_len, pointer output, int *output_len) { ret_code ret = RET_OK; - unsigned short result; + unsigned short retcode; cJSON *root, *data, *name, *description, *res; char *des = NULL; char *ret_char = NULL; + char * message[] = {"新增成功","用户组已满(最大用户组数20)","用户组名或描述长度不符合要求","用户组名中包含特殊字符","用户组名重名","数据库操作失败"}; /* 解析json串 */ root = cJSON_Parse(input); @@ -59,7 +135,7 @@ static ret_code usergroup_config_add_proc(uint source, uint config_type, } /* 执行操作 */ - result = add_group(name->valuestring, des); //增加用户组 + retcode = add_group(name->valuestring, des); //增加用户组 /* 处理返回结果 */ res = cJSON_CreateObject(); @@ -69,7 +145,10 @@ static ret_code usergroup_config_add_proc(uint source, uint config_type, //ASSERT_RET(ret); return ret; } - cJSON_AddNumberToObject(res, "result", result); + cJSON_AddNumberToObject(res, "retcode", retcode); + cJSON_AddStringToObject(res, "message", message[retcode]); + cJSON_AddStringToObject(res, "data", ""); + ret_char = cJSON_PrintUnformatted(res); memcpy(output, ret_char, strlen(ret_char)+1); @@ -229,6 +308,11 @@ ret_code usergroup_config_proc(uint source, uint config_type, input, input_len, output, output_len); break; + case USERGROUP_CONFIG_GET_UUID: + ret = usergroup_config_get_uuid_proc(source, config_type, + input, input_len, + output, output_len); + break; default: ret = RET_NOTSUPPORT; } diff --git a/Platform/user/configm/config-server/user_manager_config/user_group_config.h b/Platform/user/configm/config-server/user_manager_config/user_group_config.h index 71dae789f..0e7719abb 100644 --- a/Platform/user/configm/config-server/user_manager_config/user_group_config.h +++ b/Platform/user/configm/config-server/user_manager_config/user_group_config.h @@ -13,7 +13,6 @@ #include #include - #include "configmapi.h" #include "rpc_common.h" @@ -23,6 +22,8 @@ #define USERGROUP_CONFIG_GET 3 #define USERGROUP_CONFIG_GET_ALL 4 +#define USERGROUP_CONFIG_GET_UUID 7 + /* user group config */ ret_code usergroup_config_chk(uint source, uint *config_type, pointer input, int *input_len, diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/common_user.h b/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/common_user.h index 4f0486aec..b3a18a403 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/common_user.h +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/common_user.h @@ -54,4 +54,39 @@ do { \ element = NULL; \ } while (0) +/* +{ + "data":[ + { + "id":12 + } + ] +} +*/ +#define ARRAYJSON2INT(id_json_in, name, id_int_out) \ +do{ \ + cJSON * root = cJSON_Parse(id_json_in); \ + if(root) \ + { \ + cJSON * id_list = cJSON_GetObjectItem(root, "data"); \ + if (id_list) \ + { \ + int id_list_size = cJSON_GetArraySize(id_list); \ + if (1 == id_list_size) \ + { \ + cJSON *id_obj = cJSON_GetArrayItem(id_list, 0); \ + if (id_obj) \ + { \ + cJSON *id_json = cJSON_GetObjectItem(id_obj, name);\ + if(id_json) \ + { \ + *id_int_out = id_json->valueint; \ + } \ + cJSON_Delete(root); \ + } else {cJSON_Delete(root);} \ + } else {cJSON_Delete(root);} \ + } else {cJSON_Delete(root);} \ + } else {*id_int_out = 0;} \ +}while(0) + #endif diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user.h b/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user.h index ded894bea..48b73f8c1 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user.h +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user.h @@ -4,22 +4,24 @@ #include #include "user_group.h" -#define UNAMESIZE (127 + 1) -#define UDESIZE (127 + 1) -#define UPWDSIZE (63 + 1) +#define UNAMESIZE (64) +#define UDESIZE (64) +#define UPWDSIZE (64) #define UTIME 20 #define USER_ATTRIBUTE_NUM 8 #define OFFLINE_USER_BY_UID "offuser_by_userid_channel" #define USER_ACCOUNT_DATABASE_ID 11 +#define ADDUSER_SUCCESS 0 //新增用户成功 #define ADDUSER_FAIL_NOGROUP 1 //用户组不存在 -#define ADDUSER_FAIL_NAMELEN 2 //用户名长度不符合要求 +#define ADDUSER_FAIL_LENGTH 2 //用户名或描述长度不符合要求 #define ADDUSER_FAIL_NAMESPE 3 //用户名中含有特殊字符 #define ADDUSER_FAIL_NAMEDUP 4 //用户名重名 #define ADDUSER_FAIL_USERFULL 5 //用户已满 #define ADDUSER_FAIL_DATABASE 6 //存数据库失败 -#define ADDUSER_SUCCESS 0 //新增用户成功 +#define ADDUSER_ERROR 7 //系统错误 + #define DELUSER_SUCCESS 0 #define DELUSER_FAIL_NOTEXIST 1 @@ -79,17 +81,23 @@ typedef struct int init_user(); /*添加元素-新增用户*/ -void usermanager_add_user(char* UNAME, char* UGNAME, char* udesp, int multi, int valid, char* valid_begin_time, char* valid_end_time, USERADD* UADDRES); +void usermanager_add_user(char* UNAME, char* UGNAME, char* udesp, char* pwd, int multi, int valid, char* valid_begin_time, char* valid_end_time, USERADD* UADDRES); /* 按用户ID查询用户 */ void get_user_by_id(unsigned short ID, USERLIST* ULIST); +/* 按照用户uuid查询用户详情 */ +bool get_user_detail_by_user_uuid(int user_uuid, char ** user_detail); + /* 修改用户-web */ bool mod_user_web(USERLIST* ULIST); /* 根据用户名查询用户ID */ unsigned short get_userid_by_name(char* UNAME, void* hdbc); +/* 根据用户名查询用户UUID */ +bool get_user_uuid_by_name(char* UNAME, unsigned short * user_uuid); + /* 修改用户-命令行 */ bool mod_user_line(char* UNAME, const int INTYPE, char* IN); @@ -108,4 +116,7 @@ void offline_force_by_userid(char *userid); /*强制下线单个用户 */ void offline_force_one_user(unsigned short user_id); +/* 查询用户列表 */ +bool useraccount_showlist(int group_id, char * user_name, int page_start, int page_counts, char ** user_list); + #endif \ No newline at end of file diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user_group.h b/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user_group.h index 176d2644e..2b6d72996 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user_group.h +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/include/user_group.h @@ -3,8 +3,8 @@ #include -#define GNAMESIZE (127 + 1) -#define GDESIZE (127 + 1) +#define GNAMESIZE (64) +#define GDESIZE (64) #define ADDGROUP_SUCCESS 0 #define ADDGROUP_FAIL_FULL 1 @@ -12,6 +12,7 @@ #define ADDGROUP_FAIL_SPECHARS 3 #define ADDGROUP_FAIL_DUP 4 #define ADDGROUP_FAIL_DATABASE 5 +#define ADDGROUP_ERROR 6 #define MODGROUP_SUCCESS 0 #define MODGROUP_FAIL_NOTEXIST 1 @@ -49,7 +50,7 @@ typedef struct int init_group(); /* 添加元素-新增用户组 */ -unsigned short add_group(char* UGNAME, char* UGDES); +int add_group(char* UGNAME, char* UGDES); /* 修改用户组描述 */ unsigned short mod_group_desp(char* UGNAME, char* UGDES); @@ -63,6 +64,12 @@ bool show_group_list(USERGROUP* UGLIST); /* 根据用户组名查询用户组 */ bool find_group_by_name(char* UGNAME, USERGROUP* UGRES); +/*根据用户组uuid查询用户组id*/ +unsigned short get_groupid_by_uuid(int uugid, void * hdbc); + +/* 根据用户组名查询用户组UUID */ +bool get_group_uuid_by_name(char* gname, unsigned short * group_uuid); + /* 根据用户组名查询用户组ID */ unsigned short get_groupid_by_name(char* UGNAME, void* hdbc); diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c index 9645e577a..f41ca3bf7 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user.c @@ -33,7 +33,7 @@ int init_user() } /*添加元素-新增用户*/ -void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int valid, char* valid_begin_time, char* valid_end_time, USERADD* uaddres) +void usermanager_add_user(char* uname, char* gname, char* udesp, char* pwd, int multi, int valid, char* valid_begin_time, char* valid_end_time, USERADD* uaddres) { void *adduser_hdbc; time_t begin_time; @@ -45,10 +45,21 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int } uaddres->userID = INVALID_INDEX; - /* 校验用户名长度 */ - if (NULL == uname || (UNAMESIZE) < strlen(uname) || 0 >= strlen(uname)) + if (NULL == uname || NULL == gname) { - uaddres->result = ADDUSER_FAIL_NAMELEN; + uaddres->result = ADDGROUP_ERROR; + return; + } + + if(NULL == udesp) + { + udesp = ""; + } + + /* 校验用户名和描述长度 */ + if ((UNAMESIZE) < strlen(uname) || 0 >= strlen(uname) || UDESIZE < strlen(udesp)) + { + uaddres->result = ADDUSER_FAIL_LENGTH; return; } @@ -59,15 +70,9 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int return; } - if(NULL == gname) + if (NULL == pwd || 0 == strcmp("",pwd)) { - uaddres->result = ADDUSER_FAIL_NOGROUP; - return; - } - - if(NULL == udesp) - { - udesp = ""; + pwd = "A31as%4Gb"; } if(1 != multi) @@ -108,7 +113,6 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int /* 根据用户组名查询用户组ID */ unsigned short GID_temp = get_groupid_by_name(gname, adduser_hdbc); - //printf("adduser_hdbc:%s,用户组名:%s, 用户组id:%d .\n",adduser_hdbc, gname, GID_temp); if(INVALID_INDEX == GID_temp) { disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 @@ -119,17 +123,10 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int /* 校验重名 */ if(0 != get_userid_by_name(uname, adduser_hdbc)) { + disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 uaddres->result =ADDUSER_FAIL_NAMEDUP; return; } - // for (int i = 0; i < USER_INDEX_MAX; i++) - // { - // if (0 == strcmp(uname, g_user_table[i].uname)) - // { - // uaddres->result = ADDUSER_FAIL_NAMEDUP; - // return; - // } - // } /* 生成用户ID,判断用户是否满 */ unsigned short ID = alloc_index(&g_user_index_head); @@ -141,22 +138,23 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int } /* 连接数据库,存user_account表 */ - char *adduser_sql = "INSERT INTO `user_account` SET id = ?, group_id = ?, user_name = ?, password = ?, udescription = ?, multi_player = ?, valid_always = ?, valid_begin_time = ?, valid_end_time = ?"; - + char *adduser_sql = "INSERT INTO `user_account` SET id = ?, group_id = ?, user_name = ?, password = ?, udescription = ?, \ + multi_player = ?, valid_always = ?, valid_begin_time = ?, valid_end_time = ?"; int ret_adduser = update_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc, DB_OP_INSERT, USER_TABLE, adduser_sql, 9, DB_DATA_INT_TYPE, sizeof(ID), ID, DB_DATA_INT_TYPE, sizeof(GID_temp), GID_temp, DB_DATA_STRING_TYPE, strlen(uname)+1, uname, - DB_DATA_STRING_TYPE, 9, "12345678", + DB_DATA_STRING_TYPE, strlen(pwd)+1, pwd, DB_DATA_STRING_TYPE, strlen(udesp)+1, udesp, DB_DATA_INT_TYPE, sizeof(multi), multi, DB_DATA_INT_TYPE, sizeof(valid), valid, DB_DATA_STRING_TYPE, strlen(valid_begin_time)+1, valid_begin_time, DB_DATA_STRING_TYPE, strlen(valid_end_time)+1,valid_end_time); + disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 if(DB_RET_OK != ret_adduser) { free_index(&g_user_index_head, ID); - disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 + //disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 uaddres->result = ADDUSER_FAIL_DATABASE; return; } @@ -165,7 +163,7 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int g_user_table[ID].ID = ID; g_user_table[ID].GID = GID_temp; strcpy(g_user_table[ID].uname, uname); - strcpy(g_user_table[ID].passwd, "12345678"); + strcpy(g_user_table[ID].passwd, pwd); if(1 == multi) { g_user_table[ID].multi_valid = MULTI_SET(g_user_table[ID].multi_valid, multi); @@ -177,12 +175,62 @@ void usermanager_add_user(char* uname, char* gname, char* udesp, int multi, int g_user_table[ID].valid_end_time = end_time; } - int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 + //int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); // ret_release记录日志 uaddres->result = ADDUSER_SUCCESS; uaddres->userID = ID; return; } +/* 按照用户uuid查询用户详情 */ +bool get_user_detail_by_user_uuid(int user_uuid, char ** user_detail) +{ + void * gud_hdbc; + char * point; + int num; + if (NULL == user_detail) + { + return false; + } + + gud_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID); + if (NULL == gud_hdbc) + { + return false; + } + + char * select_sql = "SELECT U.uuid ID, G.uuid GID, U.user_name uname, G.gname gname, U.udescription udescription,\ + U.multi_player multi, U.valid_always valid, U.valid_begin_time, U.valid_end_time \ + FROM user_account U, user_group G WHERE U.group_id = G.id AND U.uuid = ? "; + char * udetail = select_datebase_by_number(USER_ACCOUNT_DATABASE_ID, gud_hdbc, USER_TABLE, select_sql, 1, 0, &num, 1, + DB_DATA_INT_TYPE, sizeof(user_uuid), user_uuid); + int ret_discon = disconnect_database(USER_ACCOUNT_DATABASE_ID, gud_hdbc); + + if (0 == num || NULL == udetail) + { + cJSON * root = cJSON_CreateObject(); + if(!root) + { + return false; + } + + cJSON_AddStringToObject(root, "data", ""); + /*{"data":""}*/ + *user_detail = cJSON_Print(root); //在函数外面释放 + return true; + } + + point = (char*)malloc(strlen(udetail)+1); + if(NULL == point) + { + return false; + } + memset(point, 0, strlen(udetail)+1); + memcpy(point, udetail, strlen(udetail)+1); + *user_detail = point; //在函数外面释放 + + return true; +} + /* 按用户ID查询用户 */ void get_user_by_id(unsigned short ID, USERLIST* ulist) { @@ -350,6 +398,103 @@ bool mod_user_web(USERLIST* ulist) return true; } + +/*解析用户组id的json字符串 --> 用户组id*/ +bool uuid_json2int(char * gid, char * name, unsigned short * id) +{ + //unsigned short GID_temp = INVALID_INDEX; + if (NULL == gid || NULL == name || NULL == id) + { + return false; + } + + cJSON *root = cJSON_Parse(gid); + if(!root) + { + return false; + } + + cJSON *id_list = cJSON_GetObjectItem(root, "data"); + if(!id_list) + { + cJSON_Delete(root); + return false; + } + + int id_list_size = cJSON_GetArraySize(id_list); + if(1 != id_list_size) + { + cJSON_Delete(root); + return false; + } + + cJSON *id_obj = cJSON_GetArrayItem(id_list, 0); + if(!id_obj) + { + cJSON_Delete(root); + return false; + } + + cJSON *gid_json = cJSON_GetObjectItem(id_obj, name); + if(!gid_json) + { + cJSON_Delete(root); + return false; + } + *id = gid_json->valueint; + + cJSON_Delete(root); + return true; +} + + + +/* 根据用户名查询用户UUID */ +bool get_user_uuid_by_name(char* uname, unsigned short * user_uuid) +{ + char *uid = NULL; + int num, discon; + void * uhdbc; + unsigned short uuid_temp = INVALID_INDEX; + + if (NULL == uname || NULL == user_uuid) + { + return false; + } + + uhdbc = connect_database(USER_ACCOUNT_DATABASE_ID); + if (NULL == uhdbc) + { + return false; + } + + /* 连接数据库,根据用户名查询user表中的uuid */ + char* select_sql = "SELECT uuid FROM user_account WHERE user_name = ?"; + uid = select_datebase_by_number(USER_ACCOUNT_DATABASE_ID, uhdbc, USER_TABLE, select_sql, 1, 0, &num, 1, + DB_DATA_STRING_TYPE, strlen(uname)+1, uname); + /* 删除数据连接 */ + discon = disconnect_database(USER_ACCOUNT_DATABASE_ID, uhdbc); //discon记录日志 + + if(0 == num) + { + *user_uuid = INVALID_INDEX; + return true; + } + + //bool ret_json2int = uuid_json2int(uid, "uuid", &uuid_temp); + + ARRAYJSON2INT(uid, "uuid", &uuid_temp); + + if (INVALID_INDEX == uuid_temp) + { + return false; + } + + *user_uuid = uuid_temp; + return true; +} + +/* 根据用户名查询用户ID */ unsigned short get_userid_by_name(char* uname, void* hdbc) { char *uid = NULL; @@ -360,12 +505,8 @@ unsigned short get_userid_by_name(char* uname, void* hdbc) { return ID_temp; } - // for (int i = 0; i < USER_INDEX_MAX && UID_temp == INVALID_INDEX; i++) - // { - // UID_temp = GETID(g_user_table[i].ID, uname, g_user_table[i].uname); - // } - /* 连接数据库,根据用户组名查询user表中的id */ + /* 连接数据库,根据用户名查询user表中的id */ char* select_sql = "SELECT id FROM user_account WHERE user_name = ?"; uid = select_datebase_by_number(USER_ACCOUNT_DATABASE_ID, hdbc, USER_TABLE, select_sql, 1, 0, &num, 1, DB_DATA_STRING_TYPE, strlen(uname)+1, uname); @@ -374,7 +515,8 @@ unsigned short get_userid_by_name(char* uname, void* hdbc) return ID_temp; } - cJSON *root = cJSON_Parse(uid); + ARRAYJSON2INT(uid, "id", &ID_temp); +/* cJSON *root = cJSON_Parse(uid); if(!root) { return ID_temp; @@ -410,6 +552,7 @@ unsigned short get_userid_by_name(char* uname, void* hdbc) ID_temp = id_json->valueint; cJSON_Delete(root); +*/ return ID_temp; } @@ -580,4 +723,92 @@ int usermanager_del_user(USER_DEL* in) int ret_release = disconnect_database(USER_ACCOUNT_DATABASE_ID, deluser_hdbc); return DELUSER_SUCCESS; /* 强制用户下线在外面 */ +} + +/* 查询用户列表 */ +bool useraccount_showlist(int uugroup_id, char * user_name, int page_start, int page_counts, char ** user_list) +{ + void * getulist_hdbc; //数据库句柄 + int num, arrlen, page_s; + char * ulist, *point, *select_sql; + + if(NULL == user_list) + { + return false; + } + + if (NULL == user_name) + { + user_name = ""; + } + + arrlen = strlen(user_name)+strlen("%")*2+1; + char temp_uname[arrlen]; + memset(temp_uname, 0, arrlen); + strcat(temp_uname, "%"); + strcat(temp_uname, user_name); + strcat(temp_uname, "%"); + + if(page_start < 1 || page_counts < 1) + { + return false; + } + + page_s = (page_start - 1)*page_counts; + + /* 连接数据库 */ + getulist_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID); + if(NULL == getulist_hdbc) + { + /* 记录日志 */ + return false; + } + + if (INVALID_INDEX == uugroup_id) //所有用户组-过滤用户名 + { + select_sql = "SELECT U.uuid ID, G.uuid GID, U.user_name uname, G.gname gname, U.udescription udescription,\ + U.multi_player multi, U.valid_always valid, U.valid_begin_time, U.valid_end_time \ + FROM user_account U, user_group G WHERE U.group_id = G.id AND U.user_name LIKE ? LIMIT ?, ?"; + ulist = select_datebase_by_number(USER_ACCOUNT_DATABASE_ID, getulist_hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 3, + DB_DATA_STRING_TYPE, arrlen+1, temp_uname, + DB_DATA_INT_TYPE, sizeof(page_s), page_s, + DB_DATA_INT_TYPE, sizeof(page_counts), page_counts); + }else + { + select_sql = "SELECT U.uuid ID, G.uuid GID, U.user_name uname, G.gname gname, U.udescription udescription,\ + U.multi_player multi, U.valid_always valid, U.valid_begin_time, U.valid_end_time \ + FROM user_account U, user_group G WHERE G.uuid = ? AND U.group_id = G.id AND U.user_name LIKE ? LIMIT ?, ?"; + ulist = select_datebase_by_number(USER_ACCOUNT_DATABASE_ID, getulist_hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 4, + DB_DATA_INT_TYPE, sizeof(uugroup_id), uugroup_id, + DB_DATA_STRING_TYPE, arrlen+1, temp_uname, + DB_DATA_INT_TYPE, sizeof(page_s), page_s, + DB_DATA_INT_TYPE, sizeof(page_counts), page_counts); + } + int discon = disconnect_database(USER_ACCOUNT_DATABASE_ID, getulist_hdbc); //discon记录日志 + if (0 == num || NULL == ulist) //查询结果为空 + { + cJSON * root = cJSON_CreateObject(); + cJSON * array; + if(!root) + { + return false; + } + + cJSON_AddItemToObject(root, "data", array = cJSON_CreateArray()); + /*{"data":[]}*/ + *user_list = cJSON_Print(root); //在函数外面释放 + + return true; + } + + point = (char*)malloc(strlen(ulist)+1); + if(NULL == point) + { + return false; + } + memset(point, 0, strlen(ulist)+1); + memcpy(point, ulist, strlen(ulist)+1); + *user_list = point; //在函数外面释放 + + return true; } \ No newline at end of file diff --git a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c index d75ea24da..b34ca50f4 100644 --- a/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c +++ b/Platform/user/configm/config-server/user_manager_config/usermanager-server/user_group.c @@ -32,15 +32,21 @@ int init_group() } /* 添加元素 */ -unsigned short add_group(char* name, char* description) +int add_group(char* name, char* description) { void *addgroup_hdbc; - /* 校验用户组名和描述的长度 */ + if (NULL == name) + { + return ADDGROUP_ERROR; + } + if (NULL == description) { description = ""; } - if (NULL == name || GNAMESIZE < strlen(name) || GDESIZE < strlen(description)) + + /* 校验用户组名和描述的长度 */ + if (GNAMESIZE < strlen(name) || 0 >= strlen(name) || GDESIZE < strlen(description)) { return ADDGROUP_FAIL_LENGTH; } @@ -60,13 +66,6 @@ unsigned short add_group(char* name, char* description) } /* 校验重名 */ - // for (int i = 0; i < GROUP_INDEX_MAX; i++) - // { - // if (0 == strcmp(name, g_group_table[i].gname)) - // { - // return ADDGROUP_FAIL_DUP; - // } - // } if(0 != get_groupid_by_name(name, addgroup_hdbc)) { disconnect_database(USER_GROUP_DATABASE_ID, addgroup_hdbc); // ret_release记录日志 @@ -82,7 +81,6 @@ unsigned short add_group(char* name, char* description) } /* 连接数据库,向user_group表中添加:用户组ID、用户组名和用户组描述 */ - /* INSERT INTO user_group SET id = "", gname = "", gdescription = "" */ char *addgroup_sql = "INSERT INTO user_group SET id = ?, gname = ?, gdescription = ?"; int ret_addgroup = update_database(USER_GROUP_DATABASE_ID, addgroup_hdbc, DB_OP_INSERT, USER_GROUP_TABLE, addgroup_sql, 3, DB_DATA_INT_TYPE, sizeof(ID), ID, @@ -220,36 +218,16 @@ bool show_group_list(USERGROUP* grouplist) return true; } -unsigned short get_groupid_by_name(char* gname, void* hdbc) +/*解析用户组id的json字符串 --> 用户组id*/ +unsigned short id_json2int(char * gid) { - /* 数据库查询数据 */ unsigned short GID_temp = INVALID_INDEX; - int num; - char *gid = NULL; - if (NULL == gname || NULL == hdbc) + if (NULL == gid) { return GID_temp; } - /* 内存遍历查询 */ - // for (int i = 0; i < GROUP_INDEX_MAX && INVALID_INDEX == GID_temp; i++) - // { - // GID_temp = GETID(g_group_table[i].ID, gname, g_group_table[i].gname); - // } - - /* 数据库查询,根据用户组名查询user_grooup表中的id */ - char *select_sql = "SELECT id FROM user_group WHERE gname = ?"; - gid = select_datebase_by_number(USER_GROUP_DATABASE_ID, hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 1, - DB_DATA_STRING_TYPE, strlen(gname)+1, gname); - - if(0 == num) - { - return GID_temp; - } - - //printf("111neibu用户组名:%s, 获取到的用户组ID:%s \n", gname, gid); - cJSON *root = cJSON_Parse(gid); if(!root) { @@ -277,6 +255,138 @@ unsigned short get_groupid_by_name(char* gname, void* hdbc) return GID_temp; } + cJSON *gid_json = cJSON_GetObjectItem(id_obj, "id"); + if(!gid_json) + { + cJSON_Delete(root); + return GID_temp; + } + GID_temp = gid_json->valueint; + + return GID_temp; +} + +/*根据用户组uuid查询用户组id*/ +unsigned short get_groupid_by_uuid(int uugid, void * hdbc) +{ + unsigned short GID_temp = INVALID_INDEX; + int num; + char *gid = NULL; + + if(NULL == hdbc) + { + return GID_temp; + } + + char *select_sql = "SELECT id FROM user_group WHERE uuid = ?"; + gid = select_datebase_by_number(USER_GROUP_DATABASE_ID, hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 1, + DB_DATA_INT_TYPE, sizeof(uugid), uugid); + + if(0 == num) + { + return GID_temp; + } + + ARRAYJSON2INT(gid, "id", &GID_temp); + //GID_temp = id_json2int(gid); + return GID_temp; +} + +/* 根据用户组名查询用户组UUID */ +bool get_group_uuid_by_name(char* gname, unsigned short * group_uuid) +{ + char *gid = NULL; + void * ghdbc; + int num, discon; + unsigned short uuid_temp = INVALID_INDEX; + + if (NULL == gname || NULL == group_uuid) + { + return false; + } + + ghdbc = connect_database(USER_GROUP_DATABASE_ID); + if (NULL == ghdbc) + { + return false; + } + + /* 连接数据库,根据用户名查询user表中的uuid */ + char* select_sql = "SELECT uuid FROM user_group WHERE gname = ?"; + gid = select_datebase_by_number(USER_GROUP_DATABASE_ID, ghdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 1, + DB_DATA_STRING_TYPE, strlen(gname)+1, gname); + /* 删除数据连接 */ + discon = disconnect_database(USER_GROUP_DATABASE_ID, ghdbc); //discon记录日志 + + if(0 == num) + { + *group_uuid = INVALID_INDEX; + return true; + } + + ARRAYJSON2INT(gid, "uuid", &uuid_temp); + + if (INVALID_INDEX == uuid_temp) + { + return false; + } + + *group_uuid = uuid_temp; + return true; +} + +/* 根据用户组名查询用户组id */ +unsigned short get_groupid_by_name(char* gname, void* hdbc) +{ + /* 数据库查询数据 */ + unsigned short GID_temp = INVALID_INDEX; + int num; + char *gid = NULL; + + if (NULL == gname || NULL == hdbc) + { + return GID_temp; + } + + /* 数据库查询,根据用户组名查询user_grooup表中的id */ + char *select_sql = "SELECT id FROM user_group WHERE gname = ?"; + gid = select_datebase_by_number(USER_GROUP_DATABASE_ID, hdbc, USER_GROUP_TABLE, select_sql, 1, 0, &num, 1, + DB_DATA_STRING_TYPE, strlen(gname)+1, gname); + + if(0 == num) + { + return GID_temp; + } + + ARRAYJSON2INT(gid, "id", &GID_temp); + +/* cJSON *root = cJSON_Parse(gid); + if(!root) + { + return GID_temp; + } + + cJSON *id_list = cJSON_GetObjectItem(root, "data"); + if(!id_list) + { + cJSON_Delete(root); + return GID_temp; + } + + int id_list_size = cJSON_GetArraySize(id_list); + if(1 != id_list_size) + { + cJSON_Delete(root); + return GID_temp; + } + + cJSON *id_obj = cJSON_GetArrayItem(id_list, 0); + if(!id_obj) + { + cJSON_Delete(root); + return GID_temp; + } + cJSON *gid_json = cJSON_GetObjectItem(id_obj, "id"); if(!gid_json) { @@ -285,7 +395,7 @@ unsigned short get_groupid_by_name(char* gname, void* hdbc) } GID_temp = gid_json->valueint; cJSON_Delete(root); - //printf("neibu用户组名:%s, 获取到的用户组ID:%d \n", gname, GID_temp); +*/ return GID_temp; } diff --git a/Product/build/user.usermanager-auth.Makefile b/Product/build/user.usermanager-auth.Makefile index 9dc8cb321..5a47c305a 100644 --- a/Product/build/user.usermanager-auth.Makefile +++ b/Product/build/user.usermanager-auth.Makefile @@ -44,10 +44,10 @@ PLATLIB_DIR := ../../Platform/build/debug #gcc libs ARM64_LIBS := -ldatabase-arm64 -ARM64_LIBS += -lcjson -lpthread -lm +ARM64_LIBS += -lcjson -lpthread -lm -lodbc LINUX_LIBS := -ldatabase-linux -LINUX_LIBS += -lcjson -lpthread -lm +LINUX_LIBS += -lcjson -lpthread -lm -lodbc # this line must be at below of thus, because of... include ../../Common/common.Makefile diff --git a/Product/user/user_manager/usermanager-test/test_usermanager.c b/Product/user/user_manager/usermanager-test/test_usermanager.c index c4e595832..2c44f80cc 100644 --- a/Product/user/user_manager/usermanager-test/test_usermanager.c +++ b/Product/user/user_manager/usermanager-test/test_usermanager.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "common_user.h" #include "array_index.h" #include "user_group.h" @@ -202,20 +203,22 @@ void sub_example() int main(void) { - - // int ID = 1; - // int GID_temp = 2; - // char *uname = "xiaoming"; - // char *udesp = ""; - // int multi = 0; - // int valid = 0; - // char *valid_begin_time = ""; - // char *valid_end_time = ""; - // void *adduser_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID); - // if(NULL == adduser_hdbc) - // { - // printf("aaaaaaaaa"); - // } +/* + int ID = 1; + int GID_temp = 2; + char *uname = "xiaoming"; + char *udesp = ""; + int multi = 0; + int valid = 0; + char *valid_begin_time = ""; + char *valid_end_time = ""; + void *adduser_hdbc = connect_database(USER_ACCOUNT_DATABASE_ID); + int num1; + char * retptr1 = NULL; + if(NULL == adduser_hdbc) + { + printf("aaaaaaaaa"); + } // char *adduser_sql = "INSERT INTO `user_account` SET id = ?, group_id = ?, user_name = ?, password = ?, udescription = ?, \ // multi_player = ?, valid_always = ?, valid_begin_time = ?, valid_end_time = ?"; // int ret_adduser = update_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc, DB_OP_INSERT, USER_TABLE, adduser_sql, 9, @@ -229,7 +232,72 @@ int main(void) // DB_DATA_STRING_TYPE, strlen(valid_begin_time)+1, valid_begin_time, // DB_DATA_STRING_TYPE, strlen(valid_end_time)+1,valid_end_time); // printf("ret_adduser = %d .\n",ret_adduser); - // return 0; + + + char * aa = "户"; + int len = strlen(aa)+strlen("*")*2+1; + char user_name_para[len]; + memset(user_name_para, 0, len); + strcat(user_name_para, "%"); + strcat(user_name_para, aa); + strcat(user_name_para, "%"); + printf("user_name_para = %s\n",user_name_para); + + int rett = create_database_table(1, adduser_hdbc, "ctest", "create table ctest ( id bigint, fl double, dt character(10), status character(7))"); + + retptr1 = select_datebase_by_number(1, adduser_hdbc, "user_account", "SELECT * FROM `user_account` WHERE user_name LIKE ?", 1, 0, &num1, 1, + DB_DATA_STRING_TYPE, 20, user_name_para); + //printf("长度:%d \n",strlen(retptr1)); + disconnect_database(USER_ACCOUNT_DATABASE_ID, adduser_hdbc); + printf("%d\n",rett); + + printf("user = %s\n", retptr1); + return 0; +*/ + + char output7[5000]; + char *testin7 = "{\"type\": 4,\"data\":{\"group_id\": 693, \"user_name\": \"户0\",\"page_start\": 1,\"page_counts\": 10}}"; + int a7 = 1; + ret_code c7 = user_config_proc(1, 1, testin7, strlen(testin7)+1, output7, &a7); + + printf("*******************************************************************************\n"); + printf("这里是个测试第7次结果,查询:%d\n", c7); + printf("%s\n", output7); + printf("*******************************************************************************\n"); + + char output8[100]; + char *testin8 = "{\"type\": 7,\"data\":{\"uname\": \"用户07\"}}"; + int a8 = 1; + ret_code c8 = user_config_proc(1, 1, testin8, strlen(testin8)+1, output8, &a8); + + printf("*******************************************************************************\n"); + printf("这里是个测试第8次结果,查询:%d\n", c8); + printf("%s\n", output8); + printf("*******************************************************************************\n"); + + + char output9[100]; + char *testin9 = "{\"type\": 7,\"data\":{\"gname\": \"aaa30\"}}"; + int a9 = 1; + ret_code c9 = usergroup_config_proc(1, 1, testin9, strlen(testin9)+1, output9, &a9); + + printf("*******************************************************************************\n"); + printf("这里是个测试第9次结果,查询:%d\n", c9); + printf("%s\n", output9); + printf("*******************************************************************************\n"); + + char output10[200]; + char *testin10 = "{\"type\": 3,\"data\":{\"user_id\": 4}}"; + int a10 = 1; + ret_code c10 = user_config_proc(1, 1, testin10, strlen(testin10)+1, output10, &a10); + + printf("*******************************************************************************\n"); + printf("这里是个测试第10次结果,查询:%d\n", c10); + printf("%s\n", output10); + printf("*******************************************************************************\n"); + + + return 0; printf("初始化用户组:%d\n", init_group()); @@ -292,7 +360,7 @@ int main(void) ret_code ret_add_group = usergroup_config_proc(1,1,testgroupin,1,outputgroup,olenth); printf("测试对外接口-增加一个用户组:%d\n", ret_add_group); printf("%s \n", outputgroup); - UCHAR_FREE(outputgroup); + //UCHAR_FREE(outputgroup); printf("增加一个用户组:%d\n", add_group("aaa22", "描述04")); printf("增加一个用户组:%d\n", add_group("aaa23", "描述04")); @@ -353,31 +421,31 @@ int main(void) printf("shibaile"); } - usermanager_add_user("用户01", "aaa04", "hello", 0, 0, NULL, NULL,addUserResullt); + usermanager_add_user("用户01", "aaa04", "hello", NULL, 0, 0, NULL, NULL,addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); //addUserResullt = AddUser("用户02", "aaa04", NULL); //printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user(NULL, "aaa04", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user(NULL, "aaa04", NULL,NULL,0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("", "aaa04", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("", "aaa04", NULL, NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户04,", "aaa04", NULL,0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户04,", "aaa04", NULL,NULL,0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户05", "aCaa04", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户05", "aCaa04", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户01", "aaa04", NULL, 0, 0, NULL, NULL,addUserResullt); + usermanager_add_user("用户01", "aaa04", NULL,NULL, 0, 0, NULL, NULL,addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户04", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户04", "aaa07", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户05", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户05", "aaa07", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户06", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户06", "aaa07", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户07", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户07", "aaa07", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户08", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户08", "aaa07", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); - usermanager_add_user("用户09", "aaa07", NULL, 0, 0, NULL, NULL, addUserResullt); + usermanager_add_user("用户09", "aaa07", NULL,NULL, 0, 0, NULL, NULL, addUserResullt); printf("%d,%d\n", addUserResullt->result, addUserResullt->userID); @@ -398,7 +466,7 @@ int main(void) printf("这里是个测试第一次结果,新增用户:%d\n", c); printf("%s\n", output1); printf("*******************************************************************************\n"); - UCHAR_FREE(output1); + for (int i = 0; i < USER_INDEX_MAX; i++) { @@ -457,7 +525,7 @@ int main(void) printf("这里是个测试第二次结果,修改用户web:%d\n", cc); printf("%s\n", output2); printf("*******************************************************************************\n"); - UCHAR_FREE(output2); + USERLIST* ulist22; ulist22 = (USERLIST*)malloc(sizeof(USERLIST)); @@ -494,7 +562,7 @@ int main(void) printf("这里是个测试第三次结果,修改用户-line:%d\n", ccc); printf("%s\n", output3); printf("*******************************************************************************\n"); - UCHAR_FREE(output3); + // unsigned short id2 = 3; // get_user_by_id(id2, ulist22); @@ -520,7 +588,7 @@ int main(void) printf("这里是个测试第四次结果,删除用户:%d\n", c4); printf("%s\n", output4); printf("*******************************************************************************\n"); - UCHAR_FREE(output4); + char * output5; @@ -539,7 +607,7 @@ int main(void) printf("这里是个测试第五次结果,删除用户组:%d\n", c5); printf("%s\n", output5); printf("*******************************************************************************\n"); - UCHAR_FREE(output5); + //UCHAR_FREE(output5); USER_AUTH_RET *aret; aret = (USER_AUTH_RET*)malloc(sizeof(USER_AUTH_RET)); @@ -600,7 +668,7 @@ int main(void) printf("这里是个测试第六次结果,删除用户05:%d\n", c4); printf("%s\n", output6); printf("*******************************************************************************\n"); - UCHAR_FREE(output6); + //UCHAR_FREE(output6); int user_ids[3] = {1,2,4}; reset_online_by_userid(user_ids, 3); @@ -679,11 +747,25 @@ int main(void) // DB_DATA_FLOAT_TYPE, 8, 11111111.555555555, // DB_DATA_STRING_TYPE, 4, "TEMP"); // printf("insert ret = %d \n", ret); - - - ret = disconnect_database(1, test_hdbc); +/* char * output7; + output7 = malloc(100); + if (NULL == output7) + { + printf("ulist fail"); + } + char *testin7 = "{\"type\": 4,\"data\":{\"group_id\": 0, \"user_name\": \"户\",\"page_start\": 1,\"page_counts\": 10}}"; + int a7_01 = 1; + int *a7 = &a7_01;; + ret_code c7 = user_config_proc(1, 1, testin7, strlen(testin7)+1, output7, a7); + + printf("*******************************************************************************\n"); + printf("这里是个测试第7次结果,查询:%d\n", c7); + printf("%s\n", output7); + printf("*******************************************************************************\n"); + UCHAR_FREE(output7); +*/ return 0; }