272 lines
6.6 KiB
C
272 lines
6.6 KiB
C
#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;
|
||
}
|