IM/MS/works/db/UserDB.cpp
2023-05-03 19:09:14 +08:00

105 lines
2.8 KiB
C++

//
// Created by dongl on 23-4-23.
//
#include "UserDB.h"
#include "template_table/im_user.h"
#include "proto/mp.sri.pb.h"
UserDB::~UserDB() {
delete sri;
}
mp::sri* UserDB::login(uint64_t account, const std::string& password) {
auto query = conn->query("select * from im_user where account=%0:account;");
query.parse();
std::vector<im_user> v;
query.storein(v, account);
printf("info: %s\n", query.info().c_str());
sri = new mp::sri();
// 无账户
if (v.empty()) {
printf("无此用户\n");
sri->set_sri_msg("account null!");
sri->set_sri_code(mp::MP_LOGIN_ACCOUNT_NOT);
return sri;
}
// 判断密码
im_user user = v[0];
std::string source = std::to_string(account) + password + user.password_salt;
size_t password_hash = std::hash<std::string>()(source);
// hash_password(&password_hash, source.c_str(), source.size());
if (user.password == std::to_string(password_hash)) {
printf("登陆成功\n");
sri->set_sri_msg("登陆成功!");
sri->set_sri_code(mp::MP_LOGIN_SUCCESS);
sri->set_sri_token("token");
sri->set_sri_username(user.username);
} else {
printf("登陆失败\n");
sri->set_sri_msg("登陆失败!");
sri->set_sri_code(mp::MP_LOGIN_FAIL);
sri->set_sri_username("null");
sri->set_sri_token("null");
}
return sri;
}
mp::sri *UserDB::register_(uint64_t account, const std::string &password, const std::string &password_salt,
const std::string& client_info) {
mysqlpp::String info(client_info);
if (!sri) {
sri = new mp::sri();
}
// 检验重复账户
auto query = conn->query("select account from im_user where account=%0:account;");
query.parse();
auto is_exist = query.store(account);
printf("error: %s, row: %zu\n", conn->error(), is_exist.num_rows());
if (!is_exist.empty()) {
sri->set_sri_msg("帐号已经注册!");
sri->set_sri_code(mp::MP_REGISTER_EXIST);
sri->set_sri_username("null");
sri->set_sri_token("null");
printf("帐号已经注册!\n");
return sri;
}
// 添加账户
query.insert(im_user(account, "用户"+ std::to_string(account), password, password_salt, info));
auto ret = query.exec();
if (ret) {
sri->set_sri_msg("注册成功!");
sri->set_sri_code(mp::MP_REGISTER_SUCCESS);
sri->set_sri_username("null");
sri->set_sri_token("null");
printf("注册成功!\n");
} else {
sri->set_sri_msg("注册失败!");
// sri->set_sri_code(mp::MP_REGISTER_EXIST);
sri->set_sri_username("null");
sri->set_sri_token("null");
printf("注册失败!\n");
}
return sri;
}
mp::sri *UserDB::logout(uint64_t account) {
return nullptr;
}