perf: 新增doo模块

This commit is contained in:
kuaifan 2023-03-14 18:37:10 +08:00
parent 13ca9031a8
commit a21caab737
6 changed files with 61 additions and 43 deletions

View File

@ -108,7 +108,7 @@ class UsersController extends AbstractController
if (empty($user)) { if (empty($user)) {
return $retError('帐号或密码错误'); return $retError('帐号或密码错误');
} }
if ($usePassword && $user->password != Base::md52($password, $user->encrypt)) { if ($usePassword && $user->password != Doo::md5s($password, $user->encrypt)) {
return $retError('帐号或密码错误'); return $retError('帐号或密码错误');
} }
// //
@ -415,13 +415,13 @@ class UsersController extends AbstractController
} }
User::passwordPolicy($newpass); User::passwordPolicy($newpass);
// //
$verify = User::whereUserid($user->userid)->wherePassword(Base::md52($oldpass, User::token2encrypt()))->count(); $verify = User::whereUserid($user->userid)->wherePassword(Doo::md5s($oldpass, User::token2encrypt()))->count();
if (empty($verify)) { if (empty($verify)) {
return Base::retError('请填写正确的旧密码'); return Base::retError('请填写正确的旧密码');
} }
// //
$user->encrypt = Base::generatePassword(6); $user->encrypt = Base::generatePassword(6);
$user->password = Base::md52($newpass, $user->encrypt); $user->password = Doo::md5s($newpass, $user->encrypt);
$user->changepass = 0; $user->changepass = 0;
$user->save(); $user->save();
User::token($user); User::token($user);
@ -879,7 +879,7 @@ class UsersController extends AbstractController
$password = trim($data['password']); $password = trim($data['password']);
User::passwordPolicy($password); User::passwordPolicy($password);
$upArray['encrypt'] = Base::generatePassword(6); $upArray['encrypt'] = Base::generatePassword(6);
$upArray['password'] = Base::md52($password, $upArray['encrypt']); $upArray['password'] = Doo::md5s($password, $upArray['encrypt']);
$upArray['changepass'] = 1; $upArray['changepass'] = 1;
$upLdap['userPassword'] = $password; $upLdap['userPassword'] = $password;
} }
@ -1324,7 +1324,7 @@ class UsersController extends AbstractController
if (!$password) { if (!$password) {
return Base::retError('请输入登录密码'); return Base::retError('请输入登录密码');
} }
if ($user->password != Base::md52($password, $user->encrypt)) { if ($user->password != Doo::md5s($password, $user->encrypt)) {
return Base::retError('密码错误'); return Base::retError('密码错误');
} }
} }

View File

@ -5,6 +5,7 @@ namespace App\Models;
use App\Exceptions\ApiException; use App\Exceptions\ApiException;
use App\Module\Base; use App\Module\Base;
use App\Module\Doo;
use Cache; use Cache;
use Carbon\Carbon; use Carbon\Carbon;
@ -294,19 +295,13 @@ class User extends AbstractModel
// 密码 // 密码
self::passwordPolicy($password); self::passwordPolicy($password);
// 开始注册 // 开始注册
$encrypt = Base::generatePassword(6); $user = Doo::userCreate($email, $password);
$inArray = [
'encrypt' => $encrypt,
'email' => $email,
'password' => Base::md52($password, $encrypt),
'created_ip' => Base::getIp(),
];
if ($other) { if ($other) {
$inArray = array_merge($inArray, $other); $user->updateInstance($other);
} }
$user = User::createInstance($inArray);
$user->az = Base::getFirstCharter($user->nickname); $user->az = Base::getFirstCharter($user->nickname);
$user->pinyin = Base::cn2pinyin($user->nickname); $user->pinyin = Base::cn2pinyin($user->nickname);
$user->created_ip = Base::getIp();
if ($user->save()) { if ($user->save()) {
$setting = Base::setting('system'); $setting = Base::setting('system');
$reg_identity = $setting['reg_identity'] ?: 'normal'; $reg_identity = $setting['reg_identity'] ?: 'normal';
@ -641,19 +636,19 @@ class User extends AbstractModel
* @param $key * @param $key
* @param $update * @param $update
* @param $userid * @param $userid
* @return self * @return self|null
*/ */
public static function botGetOrCreate($key, $update = [], $userid = 0) public static function botGetOrCreate($key, $update = [], $userid = 0)
{ {
$email = "{$key}@bot.system"; $email = "{$key}@bot.system";
$botUser = self::whereEmail($email)->first(); $botUser = self::whereEmail($email)->first();
if (empty($botUser)) { if (empty($botUser)) {
$encrypt = Base::generatePassword(6); $botUser = Doo::userCreate($email, Base::generatePassword(32));
$botUser = self::createInstance([ if (empty($botUser)) {
return null;
}
$botUser->updateInstance([
'bot' => 1, 'bot' => 1,
'encrypt' => $encrypt,
'email' => $email,
'password' => Base::md52(Base::generatePassword(32), $encrypt),
'created_ip' => Base::getIp(), 'created_ip' => Base::getIp(),
]); ]);
$botUser->save(); $botUser->save();

View File

@ -2,6 +2,8 @@
namespace App\Module; namespace App\Module;
use App\Exceptions\ApiException;
use App\Models\User;
use Carbon\Carbon; use Carbon\Carbon;
use FFI; use FFI;
@ -22,23 +24,20 @@ class Doo
{ {
if (self::$doo === null) { if (self::$doo === null) {
$doo = FFI::cdef(<<<EOF $doo = FFI::cdef(<<<EOF
void initialize(); void initialize(char* work, char* lang);
void setWorkDir(char* val);
void setDefaultLanguage(char* val);
void setUserToken(char* val); void setUserToken(char* val);
char* license(); char* license();
int userId(); int userId();
char* userExpiredAt(); char* userExpiredAt();
char* userEmail(); char* userEmail();
char* userToken(); char* userToken();
char* userCreate(char* email, char* password);
char* tokenEncode(int userid, char* email, char* encrypt, int days); char* tokenEncode(int userid, char* email, char* encrypt, int days);
char* tokenDecode(char* val); char* tokenDecode(char* val);
char* translate(char* val); char* translate(char* val, char* val);
char* translateSpecified(char* val, char* val); char* md5s(char* text, char* password);
EOF, app_path("Module/Lib/doo.so")); EOF, app_path("Module/Lib/doo.so"));
$doo->initialize(); $doo->initialize("/var/www", Base::headerOrInput('language'));
$doo->setWorkDir("/var/www");
$doo->setDefaultLanguage(Base::headerOrInput('language'));
$doo->setUserToken(Base::getToken()); $doo->setUserToken(Base::getToken());
self::$doo = $doo; self::$doo = $doo;
} }
@ -126,6 +125,25 @@ class Doo
return self::string(self::init()->userToken()); return self::string(self::init()->userToken());
} }
/**
* 创建帐号
* @param $email
* @param $password
* @return User|\Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|object|null
*/
public static function userCreate($email, $password)
{
$data = Base::json2array(self::string(self::init()->userCreate($email, $password)));
if (Base::isError($data)) {
throw new ApiException($data['msg'] ?: '注册失败');
}
$user = User::whereEmail($email)->first();
if (empty($user)) {
throw new ApiException('注册失败');
}
return $user;
}
/** /**
* 生成token编码token * 生成token编码token
* @param $userid * @param $userid
@ -151,20 +169,25 @@ class Doo
return $array; return $array;
} }
/** /**
* 翻译 * 翻译
* @param string $text * @param string $text
* @param string|null $type * @param string $type
* @return string * @return string
*/ */
public static function translate($text, $type = null) public static function translate($text, $type = "")
{ {
if ($type) { return self::string(self::init()->translate($text, $type));
$test = self::init()->translateSpecified($text, $type); }
} else {
$test = self::init()->translate($text); /**
} * md5防破解
return self::string($test); * @param string $text
* @param string $password
* @return string
*/
public static function md5s($text, $password = "")
{
return self::string(self::init()->md5s($text, $password));
} }
} }

View File

@ -74,19 +74,18 @@ typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
extern "C" { extern "C" {
#endif #endif
extern void initialize(); extern void initialize(char* work, char* lang);
extern void setWorkDir(char* val);
extern void setDefaultLanguage(char* val);
extern void setUserToken(char* token); extern void setUserToken(char* token);
extern char* license(); extern char* license();
extern int userId(); extern int userId();
extern char* userExpiredAt(); extern char* userExpiredAt();
extern char* userEmail(); extern char* userEmail();
extern char* userToken(); extern char* userToken();
extern char* userCreate(char* email, char* password);
extern char* tokenEncode(int userid, char* email, char* encrypt, int days); extern char* tokenEncode(int userid, char* email, char* encrypt, int days);
extern char* tokenDecode(char* token); extern char* tokenDecode(char* token);
extern char* translate(char* text); extern char* translate(char* text, char* langType);
extern char* translateSpecified(char* text, char* langType); extern char* md5s(char* text, char* password);
#ifdef __cplusplus #ifdef __cplusplus
} }

Binary file not shown.

View File

@ -7,6 +7,7 @@ use App\Models\UserBot;
use App\Models\WebSocketDialog; use App\Models\WebSocketDialog;
use App\Models\WebSocketDialogMsg; use App\Models\WebSocketDialogMsg;
use App\Module\Base; use App\Module\Base;
use App\Module\Doo;
use App\Module\Ihttp; use App\Module\Ihttp;
use Carbon\Carbon; use Carbon\Carbon;
@ -236,7 +237,7 @@ class BotReceiveMsgTask extends AbstractTask
$data = $this->botManagerOne($botId, $msg->userid); $data = $this->botManagerOne($botId, $msg->userid);
if ($data) { if ($data) {
$data->encrypt = Base::generatePassword(6); $data->encrypt = Base::generatePassword(6);
$data->password = Base::md52(Base::generatePassword(32), $data->encrypt); $data->password = Doo::md5s(Base::generatePassword(32), $data->encrypt);
$data->save(); $data->save();
} else { } else {
$type = "notice"; $type = "notice";