<?php
# Copyright (C) Finkle Enterprises, LLC 2014,2018,2020,2021,2022,2023,2024 Used by permission only. F. Koenen fkoenen@feweb.net
class noncelib {private$duration,$uniqkey,$name;function __construct($args=array()){extract($args);$this->usesession=( ! isset($usesession)||$usesession===true)?true:false;$this->duration=( isset($duration)&& (int)$duration>=30 && (int)$duration <=86400)?$duration:30;$this->uniqkey=( isset($uniqkey)&& trim(str_replace('"','',$uniqkey)).'x'!='x')?trim(str_replace('"','',$uniqkey)):'DoubleCubeIs643216842';$this->name=( isset($name)&& trim(str_replace('"','',$name)).'x'!='x')?trim(str_replace('"','',$name)):'noncelib';}public function getarray($action='',$user=''){return array($this->name,$this->gethash($action,$user));}public function querystring($action='',$user=''){return$this->name.'='.$this->gethash($action,$user);}public function formfield($action='',$user=''){return '<input type="hidden" id="'.$this->name.'_nonce" name="'.$this->name.'_nonce" value="'.$this->gethash($action,$user).'" />';}public function nonce($action='',$user=''){return$this->gethash($action,$user);}public function isvalid($nonce,$action='',$user=''){if(substr($this->nh($action,$user),-12,10)==$nonce)return true;return false;}public function gethash($action='',$user=''){return substr($this->nh($action,$user),-12,10);}private function nh($action='',$user=''){if($this->usesession!==true){$f=sys_get_temp_dir().'/noncelib_'.md5($this->name.$this->uniqkey.$action.$user);$i=(int)@file_get_contents($f);$t=(int)(substr(time(),0,-3).'799');if(! file_exists($f))file_put_contents($f,$t +$this->duration);if(time()> (int)$i)$i=$t +$this->duration;file_put_contents($f,$i);}else {$i=(int)$_SESSION['noncelib_'.$this->name.'_expire'];$t=(int)(substr(time(),0,-3).'799');if(!$_SESSION['noncelib_'.$this->name.'_expire'] || (int)$_SESSION['noncelib_'.$this->name.'_expire']==0)$_SESSION['noncelib_'.$this->name.'_expire']=$t +$this->duration;if(time()> (int)$_SESSION['noncelib_'.$this->name.'_expire'])$i=$_SESSION['noncelib_'.$this->name.'_expire']=$t +$this->duration;}if($i <=0)$i=ceil( time()/$this->duration);return md5($i.$action.$user.$action);}}
