148 lines
4.6 KiB
PHP
148 lines
4.6 KiB
PHP
|
|
<?
|
||
|
|
|
||
|
|
use \core\db\structure\Column as C;
|
||
|
|
use \core\db\structure\eColumnType;
|
||
|
|
|
||
|
|
use core\lang\structure\LangVariable as V;
|
||
|
|
use core\user\admin\structure\adminLang as Vars;
|
||
|
|
|
||
|
|
new Admin();
|
||
|
|
class Admin extends \ModuleTable {
|
||
|
|
// Название таблицы
|
||
|
|
static $table_name = 'admin';
|
||
|
|
// Ссылка на самого себя
|
||
|
|
static $self;
|
||
|
|
// Ссылка на языковой пакет
|
||
|
|
|
||
|
|
// Переменные столбцов
|
||
|
|
static $ID = 'id';
|
||
|
|
static $SNAME = 'surname';
|
||
|
|
static $NAME = 'name';
|
||
|
|
static $FNAME = 'father_name';
|
||
|
|
static $ACCOUNT = 'account';
|
||
|
|
static $PASSWORD = 'password';
|
||
|
|
static $DATE = 'date';
|
||
|
|
static $BDATE = 'bdate';
|
||
|
|
|
||
|
|
|
||
|
|
static $cookieIDKey = 'aid';
|
||
|
|
static $cookieHashKey = 'ah';
|
||
|
|
static $data = [];
|
||
|
|
|
||
|
|
static function afterInstall() {
|
||
|
|
parent::afterInstall();
|
||
|
|
self::add([
|
||
|
|
self::$ACCOUNT=>'victor',
|
||
|
|
self::$PASSWORD=>1,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
|
||
|
|
static function init(){
|
||
|
|
define("IF_ADMIN",self::if_auth());
|
||
|
|
define("AID",IF_ADMIN ? self::$data[ self::$ID ] : 0);
|
||
|
|
}
|
||
|
|
static function exit(){
|
||
|
|
Core::setCookie(self::$cookieIDKey,'-');
|
||
|
|
Core::setCookie(self::$cookieHashKey,'-');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
static function if_auth(){
|
||
|
|
if($uid = intval($_COOKIE[ self::$cookieIDKey ]) and $hash = $_COOKIE[ self::$cookieHashKey ]) {
|
||
|
|
$acc = self::getByID($uid);
|
||
|
|
$res = strcmp($acc[self::$PASSWORD],$hash)==0;
|
||
|
|
if($res) self::$data = $acc;
|
||
|
|
return $res;
|
||
|
|
} else return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
static function getSystemLangValues():array{ return Vars::getArray();}
|
||
|
|
|
||
|
|
static function add($values){
|
||
|
|
$res = new stdClass();
|
||
|
|
$res->e = 0;
|
||
|
|
$res->m = '';
|
||
|
|
$admin = self::getByAccount($values[ self::$ACCOUNT ]);
|
||
|
|
|
||
|
|
if(!$admin) {
|
||
|
|
$r = self::insert($values);
|
||
|
|
$a = self::getByID($r->id);
|
||
|
|
$c[self::$PASSWORD] = self::hash($a);
|
||
|
|
self::updateById($r->id, $c);
|
||
|
|
$res->id = $r->id;
|
||
|
|
} else {
|
||
|
|
$res->e = 1;
|
||
|
|
$res->m = V::get(Vars::$ACCOUNT_BUSY);
|
||
|
|
}
|
||
|
|
return $res;
|
||
|
|
}
|
||
|
|
|
||
|
|
static function hash($acc){ return md5(\Config::$SALT.$acc[self::$ID].self::$DATE.\Config::$SALT.$acc[self::$PASSWORD]); }
|
||
|
|
|
||
|
|
static function checkPassword($acc,$pass):bool{
|
||
|
|
$hash = $acc[self::$PASSWORD];
|
||
|
|
$acc[self::$PASSWORD] = $pass;
|
||
|
|
return strcmp($hash, self::hash($acc) )===0;
|
||
|
|
}
|
||
|
|
|
||
|
|
static function getByAccount(string $account){
|
||
|
|
return DB::fetch(self::select( [Query::WHERE => new Where (Where::_operator(self::$ACCOUNT,'=',$account)) ] ));
|
||
|
|
}
|
||
|
|
|
||
|
|
static function prepareLogin($login) {return trim(strtolower((string)$login));}
|
||
|
|
static function preparePass($pass) {return trim((string)$pass);}
|
||
|
|
|
||
|
|
|
||
|
|
static function login($login,$pass){
|
||
|
|
$res = new stdClass();
|
||
|
|
$res->e = '';
|
||
|
|
$res->m = '';
|
||
|
|
$login = self::prepareLogin($login);
|
||
|
|
$pass = self::preparePass($pass);
|
||
|
|
$acc = self::getByAccount($login);
|
||
|
|
if($acc) {
|
||
|
|
if(self::checkPassword($acc,$pass)){
|
||
|
|
Core::setCookie(self::$cookieIDKey,$acc[self::$ID]);
|
||
|
|
Core::setCookie(self::$cookieHashKey,$acc[self::$PASSWORD]);
|
||
|
|
} else {
|
||
|
|
$res->e = V::get(Vars::$WRONG_PASSWORD);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$res->e = V::get(Vars::$ADMIN_NOT_FOUND);
|
||
|
|
}
|
||
|
|
return $res;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
static function columnInfo() : array {
|
||
|
|
$common = [
|
||
|
|
C::TYPE => eColumnType::VARCHAR,
|
||
|
|
C::LENGTH => 63,
|
||
|
|
];
|
||
|
|
return [
|
||
|
|
new C([
|
||
|
|
C::VAR_NAME =>&self::$ID,
|
||
|
|
C::TYPE =>eColumnType::INT,
|
||
|
|
C::AUTO_INCREMENT =>true,
|
||
|
|
C::PRIMARY =>true,
|
||
|
|
C::DEFAULT =>0,
|
||
|
|
]),
|
||
|
|
new C($common + array(C::VAR_NAME => &self::$SNAME)),
|
||
|
|
new C($common + array(C::VAR_NAME => &self::$NAME)),
|
||
|
|
new C($common + array(C::VAR_NAME => &self::$FNAME)),
|
||
|
|
new C($common + array(C::VAR_NAME => &self::$ACCOUNT)),
|
||
|
|
new C($common + array(C::VAR_NAME => &self::$PASSWORD)),
|
||
|
|
new C([
|
||
|
|
C::VAR_NAME => &self::$BDATE,
|
||
|
|
C::TYPE => eColumnType::INT,
|
||
|
|
C::DEFAULT => 0,
|
||
|
|
]),
|
||
|
|
new C([
|
||
|
|
C::VAR_NAME => &self::$DATE,
|
||
|
|
C::TYPE => eColumnType::INT,
|
||
|
|
C::DEFAULT => time(),
|
||
|
|
]),
|
||
|
|
];
|
||
|
|
}
|
||
|
|
}
|