229 lines
7.3 KiB
PHP
229 lines
7.3 KiB
PHP
<?php
|
|
|
|
use \core\db\structure\Column as C;
|
|
use \core\db\structure\eColumnType;
|
|
use core\lang\structure\LangVariable as V;
|
|
use core\user\account\structure\accountLang as Vars;
|
|
use core\Token;
|
|
use market\Purchase;
|
|
use market\Item as MarketItem;
|
|
|
|
class Account extends \ModuleTable {
|
|
static $table_name = 'account';
|
|
static $controller = 'core.user.account';
|
|
|
|
static $ID = 'id';
|
|
static $NAME = 'name';
|
|
static $LOGIN = 'login';
|
|
static $EMAIL = 'email';
|
|
static $PASSWORD = 'password';
|
|
static $DATE = 'date';
|
|
|
|
static $self;
|
|
static $cookieIDKey = 'id';
|
|
static $cookieHashKey = 'h';
|
|
static $data = [];
|
|
static $isSuper = false;
|
|
|
|
static $purchases = [];
|
|
static $purchases_values = [];
|
|
|
|
|
|
static function getPurchased($account_id){
|
|
$account_id = intval($account_id);
|
|
if($c = self::$purchases[$account_id]) return $c;
|
|
$r = Purchase::select([
|
|
\Query::WHERE => new \Where(\Where::_operator(Purchase::$ACCOUNT,'=',$account_id))
|
|
],true);
|
|
self::$purchases[$account_id] = $r;
|
|
foreach ($r as $v){
|
|
self::$purchases[$account_id]['types'][] = $v[MarketItem::$TYPE];
|
|
}
|
|
return self::$purchases[$account_id];
|
|
}
|
|
static function getPurchaseTypes($account_id){
|
|
self::getPurchased($account_id);
|
|
return self::$purchases[$account_id]['types'];
|
|
}
|
|
|
|
static function init(){
|
|
define("IF_AUTH",self::if_auth());
|
|
define("UID",IF_AUTH ? self::$data[ self::$ID ] : 0);
|
|
static::$isSuper = (intval(UID)===1);
|
|
}
|
|
|
|
static function afterInstall() {
|
|
parent::afterInstall(); // TODO: Change the autogenerated stub
|
|
self::add([
|
|
self::$LOGIN=>'test@test.ru',
|
|
self::$PASSWORD=>'test',
|
|
]);
|
|
}
|
|
static function exit(){
|
|
Core::setCookie(self::$cookieIDKey,'-');
|
|
Core::setCookie(self::$cookieHashKey,'-');
|
|
}
|
|
|
|
static function getName($v, array $options = []): string {
|
|
$x = [];
|
|
//if($c = trim($v[self::$SNAME])) $x[] = $c;
|
|
if($c = trim($v[self::$ID])) $x[] = '#'.$c.' ';
|
|
if($c = trim($v[self::$NAME])) $x[] = $c;
|
|
//if($c = trim($v[self::$FNAME])) $x[] = $c;
|
|
return implode(" ",$x);
|
|
}
|
|
|
|
static function reg($data){
|
|
$res = new stdClass();
|
|
$res->e = 0;
|
|
$res->m = '';
|
|
|
|
$login = self::prepareLogin($data['login']);
|
|
$pass = self::prepareLogin($data['pass']);
|
|
|
|
$acc = self::getByLogin($login);
|
|
if(!$acc) {
|
|
$r = self::add([
|
|
self::$PASSWORD=>$pass,
|
|
self::$NAME=>$data['name'],
|
|
self::$LOGIN=>$login,
|
|
]);
|
|
$acc = self::getByID($r->id);
|
|
$hash = $acc[self::$PASSWORD];
|
|
Core::setCookie(self::$cookieIDKey,$acc[self::$ID]);
|
|
Core::setCookie(self::$cookieHashKey,$hash);
|
|
$res->id = $r->id;
|
|
$res->h = $hash;
|
|
|
|
\ms\MS::prepareNewUser($r->id);
|
|
|
|
} else {
|
|
$res->e = 1;
|
|
$res->m = V::get(Vars::$ACCOUNT_BUSY);
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
static function if_auth(){
|
|
if (!empty($_COOKIE[self::$cookieIDKey]) && !empty($_COOKIE[self::$cookieHashKey])) {
|
|
$uid = intval($_COOKIE[self::$cookieIDKey]);
|
|
$hash = $_COOKIE[self::$cookieHashKey];
|
|
$acc = self::getByID($uid);
|
|
$res = strcmp($acc[self::$PASSWORD],$hash)==0;
|
|
if($res) self::$data = $acc;
|
|
return $res;
|
|
} else if( \Core::$TOKEN ){
|
|
$token = Token::getByHash(\Core::$TOKEN);
|
|
if($token[Token::$ACCOUNT]){
|
|
self::$data = self::getByID( $token[Token::$ACCOUNT] );
|
|
return true;
|
|
} else return false;
|
|
} else return false;
|
|
}
|
|
|
|
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 = 0;
|
|
$res->m = '';
|
|
$login = self::prepareLogin($login);
|
|
$pass = self::preparePass($pass);
|
|
$acc = self::getByLogin($login);
|
|
if($acc) {
|
|
if(self::checkPassword($acc,$pass)){
|
|
Core::setCookie(self::$cookieIDKey ,$acc[self::$ID]);
|
|
Core::setCookie(self::$cookieHashKey,$acc[self::$PASSWORD]);
|
|
if(Core::$IS_APP) {
|
|
$hash = Token::getHash($acc[self::$ID],0,\Site::$portal_id);
|
|
Token::insert([
|
|
Token::$ACCOUNT => $acc[self::$ID],
|
|
Token::$HASH => $hash,
|
|
]);
|
|
$res->token = $hash;
|
|
}
|
|
} else {
|
|
$res->e = 1;
|
|
$res->m = V::get(Vars::$WRONG_PASSWORD);
|
|
}
|
|
} else {
|
|
$res->e = 1;
|
|
$res->m = V::get(Vars::$ACCOUNT_NOT_FOUND);
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
static function getSystemLangValues():array{ return Vars::getArray(); }
|
|
|
|
static function add($values){
|
|
$res = new stdClass();
|
|
$res->e = 0;
|
|
$res->m = '';
|
|
$admin = self::getByLogin($values[ self::$LOGIN ]);
|
|
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 getByLogin(string $account){
|
|
return DB::fetch(self::select( [Query::WHERE => new Where (Where::_operator(self::$LOGIN,'=',$account)) ] ));
|
|
}
|
|
|
|
|
|
static function columnInfo() : array {
|
|
return [
|
|
new C([
|
|
C::VAR_NAME =>&self::$ID,
|
|
C::TYPE =>eColumnType::INT,
|
|
C::AUTO_INCREMENT =>true,
|
|
C::PRIMARY =>true,
|
|
C::DEFAULT =>0,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME =>&self::$NAME,
|
|
C::TYPE =>eColumnType::VARCHAR,
|
|
C::LENGTH =>255,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME =>&self::$LOGIN,
|
|
C::TYPE =>eColumnType::VARCHAR,
|
|
C::LENGTH =>255,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME =>&self::$EMAIL,
|
|
C::TYPE =>eColumnType::VARCHAR,
|
|
C::LENGTH =>255,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME =>&self::$PASSWORD,
|
|
C::TYPE =>eColumnType::VARCHAR,
|
|
C::LENGTH =>255,
|
|
]),
|
|
new C([
|
|
C::VAR_NAME =>&self::$DATE,
|
|
C::TYPE =>eColumnType::INT,
|
|
C::DEFAULT =>time(),
|
|
]),
|
|
];
|
|
}
|
|
}
|
|
|
|
new Account(); |