[ "type" => "CHAR(4)", "nullable" => false, "index"=>"INDEX" ], "instance" => [ "type" => "VARCHAR(255)", "nullable" => false, ], "class" => [ "type" => "VARCHAR(255)", "nullable" => false, ], "operation" => [ "type" => "VARCHAR(255)", "nullable" => false, ], "reference" => [ "type" => "VARCHAR(255)", "nullable" => false, ], "hash" => [ "type" => "VARCHAR(255)", "nullable" => false, ], ]; protected function __xConstruct() { $this->issueStamp=new time(); $this->expireStamp=new time(); } protected function getHash() { return xcrypt::hash(json_encode([ $this->instance, $this->class, $this->operation, $this->reference, $this->payload, ])); } public function fillByHash() { if (empty($this->hash)) { $this->hash=$this->getHash();} $this->checkSql(); if ($row=$this->sql->quickExec1Line($this->__sqlSelectTemplate." WHERE `hash`='".$this->hash."'")) { $this->fillFromRow($row); return true; } else { return false; } } protected function validateSave() { if ($this->issueStamp->isNull()) {$this->issueStamp=time::current();} if ($this->expireStamp->isNull()) {$this->expireStamp=time::current()->addSec(static::defaultTTL);} if ($this->code==null) { $this->code=(common::genPasswd(4,[0,1,2,3,4,5,6,7,8,9]));} if (empty($this->instance) || empty($this->class) || empty($this->operation) || empty($this->reference)) { throw new foxException("Empty refences not allowed here","400"); } if (empty($this->hash)) {$this->hash = $this->getHash(); } return !$this->fillByHash(); } public static function flushExpired() { $sql=static::qGetSql(); $sql->quickExec("DELETE FROM `".static::$sqlTable."` where `expireStamp` < '".time::current()."'"); } } ?>