secgateway/Product/user/user_manager/user.c

272 lines
6.6 KiB
C
Raw Normal View History

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include "common_user.h"
#include "array_index.h"
#include "user_mod.h"
#include "sg/user/user_manager/user_group.h"
#include "sg/user/user_manager/user.h"
extern ARRAY g_user_index_head;
extern USERGROUP g_group_table[];
extern exce_mod_user g_user_modfunc_table[];
USERACCOUNT g_user_table[USER_INDEX_MAX];
/*初始化参数*/
int init_user()
{
/* 初始化用户的index */
int init_result = init_array(&g_user_index_head, USER_INDEX_MAX);
if (INIT_FAIL == init_result)
{
return INIT_FAIL;
}
memset(g_user_table, 0, sizeof(g_user_table));
return INIT_SUCCESS;
}
/*添加元素-新增用户*/
void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
{
if (NULL == uaddres)
{
return;
}
uaddres->userID = INVALID_INDEX;
/* 校验用户名长度 */
if (NULL == uname || (UNAMESIZE) < strlen(uname) || 0 >= strlen(uname))
{
uaddres->result = ADD_FAIL_NAMELEN;
return;
}
/* 校验用户名中不含特殊字符 */
if (SPECHAR(uname))
{
uaddres->result = ADD_FAIL_NAMESPE;
return;
}
/* 根据用户组名查询用户组ID */
if(NULL == gname)
{
uaddres->result = ADD_FAIL_NOGROUP;
return;
}
unsigned short GID_temp = get_groupid_by_name(gname);
if(INVALID_INDEX == GID_temp)
{
uaddres->result = ADD_FAIL_NOGROUP;
return;
}
/* 校验重名 */
for (int i = 0; i < USER_INDEX_MAX; i++)
{
if (0 == strcmp(uname, g_user_table[i].uname))
{
uaddres->result = ADD_FAIL_NAMEDUP;
return;
}
}
/* 生成用户ID判断用户是否满 */
unsigned short ID = alloc_index(&g_user_index_head);
if (INVALID_INDEX == ID)
{
uaddres->result = ADD_FAIL_USERFULL;
return;
}
/* 存内存 */
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, "123456");
/* 连接数据库存user表 */
/* INSERT INTO `user` SET id = , group_id = , user_name = "", password = "", multi_player = , valid_always = */
uaddres->result = ADD_SUCCESS;
uaddres->userID = ID;
return;
}
/* 按用户ID查询用户 */
void get_user_by_id(unsigned short ID, USERLIST* ulist)
{
unsigned short temp_multi, temp_valid;
char temp_begin_time[UTIME] = { 0 };
char temp_end_time[UTIME] = { 0 };
if (NULL == ulist || INVALID_INDEX >= ID || (USER_INDEX_MAX - 1) <= ID)
{
return;
}
memset(ulist, 0, sizeof(ulist));
/* 内存查询用户 */
temp_multi = MULTI_GET(g_user_table[ID].multi_valid);
temp_valid = VALID_GET(g_user_table[ID].multi_valid);
ulist->ID = ID;
ulist->GID = g_user_table[ID].GID;
ulist->multi = temp_multi;
ulist->valid = temp_valid;
strcpy(ulist->uname, g_user_table[ID].uname);
strcpy(ulist->gname, g_group_table[ulist->GID].gname);
strcpy(ulist->udescription, g_user_table[ID].udescription);
strcpy(ulist->passwd, g_user_table[ID].passwd);
if (1 == temp_valid)
{
TIME_T2STRING(g_user_table[ID].valid_begin_time, temp_begin_time);
TIME_T2STRING(g_user_table[ID].valid_end_time, temp_end_time);
}
strcpy(ulist->valid_begin_time, temp_begin_time);
strcpy(ulist->valid_end_time, temp_end_time);
/* 查数据库,这里查数据库没上面快 */
/* SELECT id, group_id, multi_player, valid_always, user_name, udescription,valid_begin_time,valid_end_time FROM `user`WHERE id = */
return;
}
/* 修改用户-web */
bool mod_user_web(USERLIST* ulist)
{
USERLIST* temp_user;
time_t cur_time;
/* 可以修改的数据用户组ID、描述、密码、公用账号、永久有效、有效期开始时间、有效期结束时间 */
if (NULL == ulist || INVALID_INDEX == ulist->ID || INVALID_INDEX == ulist->GID)
{
return false;
}
/* 校验描述长度 */
if (NULL != ulist->udescription)
{
if (UDESIZE < strlen(ulist->udescription))
{
return false;
}
}
/* 校验密码长度 */
if (NULL != ulist->passwd)
{
if (8 >= strlen(ulist->passwd) || 24 <= strlen(ulist->passwd))
{
return false;
}
}
temp_user = (USERLIST*)malloc(sizeof(USERLIST));
if (NULL == temp_user)
{
return false;
}
get_user_by_id(ulist->ID, temp_user);
/* 更新内存数据 */
strcpy(g_user_table[ulist->ID].udescription, ulist->udescription);
strcpy(g_user_table[ulist->ID].passwd, ulist->passwd);
g_user_table[ulist->ID].GID = ulist->GID;
g_user_table[ulist->ID].multi_valid = MULTI_SET(g_user_table[ulist->ID].multi_valid, ulist->multi);
g_user_table[ulist->ID].multi_valid = VALID_SET(g_user_table[ulist->ID].multi_valid, ulist->valid);
/* 更新有效日期时间 */
if (1 == ulist->valid)
{
//if(判断是否符合格式)
STRING2TIME_T(ulist->valid_begin_time, g_user_table[ulist->ID].valid_begin_time);
STRING2TIME_T(ulist->valid_end_time, g_user_table[ulist->ID].valid_end_time);
return true;
}
/* 连接数据库更显user表 */
/* UPDATE `user` u SET u.group_id = ,u.udescription = "", u.`password` = "", u.multi_player = , u.valid_always = , u.valid_begin_time = "", u.valid_end_time = "" WHERE u.id = ; */
/* 调用接口查询该用户是否有在线IP */
/* 如果没有直接return */
/* 密码发生改变,下线用户 */
if (0 != strcmp(ulist->passwd, temp_user->passwd))
{
/* 下线用户return */
}
/* 公用账号改为单用户登陆,下线用户 */
if (1 == ulist->multi && 0 == temp_user->multi)
{
/* 下线用户return */
}
/* 当前时间不在有效期内,下线用户 */
if (1 == VALID_GET(g_user_table[ulist->ID].multi_valid))
{
cur_time = time(NULL);
if (cur_time < g_user_table[ulist->ID].valid_begin_time || cur_time > g_user_table[ulist->ID].valid_end_time)
{
/* 下线用户return */
}
}
return true;
}
unsigned short get_userid_by_name(char* uname)
{
/* 内存查询数据 */
unsigned short UID_temp = INVALID_INDEX;
if (NULL == uname)
{
return UID_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 */
/* SELECT id FROM user WHERE user_name = "" */
return UID_temp;
}
/* 修改用户-命令行 */
bool mod_user_line(char* uname, const int intype, char* in)
{
unsigned short uid;
bool result = true;
if (NULL == uname || NULL == in)
{
return false;
}
/* 检查修改类型 */
if (intype < 0 || intype >= USER_ATTRIBUTE_NUM)
{
return false;
}
/* 根据用户名查询用户ID */
uid = get_userid_by_name(uname);
if (INVALID_INDEX == uid)
{
return false;
}
/*0描述、1所属组名、2登陆密码、3公用账号、4永久有效、5有效期开始时间、6有效期结束时间 */
result = g_user_modfunc_table[intype](uid, in);
return result;
}