[Update] Loop -> implemented information cache (action/current state/states) + loop minimum"
[Todo] Implement loop function using actions/states [Done] Implemented first auth verification (if in list but no action check)
This commit is contained in:
parent
aa7377ede2
commit
f698fe389a
Binary file not shown.
|
@ -4,28 +4,173 @@
|
||||||
|
|
||||||
require_once __DIR__.'/../../include/php/const';
|
require_once __DIR__.'/../../include/php/const';
|
||||||
|
|
||||||
$f_authlist;
|
$f_auth;
|
||||||
$f_accesslog;
|
$f_accesslog;
|
||||||
|
$f_states;
|
||||||
|
$f_actions;
|
||||||
|
|
||||||
|
$state = [];
|
||||||
|
|
||||||
|
$actions = [];
|
||||||
|
$states = [];
|
||||||
|
|
||||||
|
$last_user = null;
|
||||||
|
$timeout = 1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* RETURNS THE PERMISSIONS FOR A SPECIFIC CODE AND AN ACTION
|
||||||
|
*
|
||||||
|
* @code<string> Some RFID code
|
||||||
|
*
|
||||||
|
* @return user<array> User info if found ; else NULL
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
function auth($code){
|
||||||
|
|
||||||
|
global $f_auth;
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) Goto first line */
|
||||||
|
$f_auth->seek(0);
|
||||||
|
|
||||||
|
/* (2) Parse each line */
|
||||||
|
while( $f_auth->eof() ){
|
||||||
|
|
||||||
|
/* (3) Try to parse line */
|
||||||
|
$parsed = json_decode($f_auth->fgets(), true);
|
||||||
|
|
||||||
|
/* (3) Ignore if parse error */
|
||||||
|
if( is_null($parsed) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (4) If wrong code -> go to next */
|
||||||
|
if( $parsed[0] != $code )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (5) return user info */
|
||||||
|
return [
|
||||||
|
'id' => $parsed[1],
|
||||||
|
'can' => $parsed[2]
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (6) Return FALSE if not found */
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$last_card;
|
|
||||||
$times;
|
|
||||||
|
|
||||||
|
|
||||||
function mfrc522_setup(){
|
function mfrc522_setup(){
|
||||||
|
|
||||||
|
/* [0] Initialize global variables
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) File descriptiors */
|
||||||
|
global $f_auth, $f_accesslog;
|
||||||
|
|
||||||
|
/* (2) Caches */
|
||||||
|
global $actions, $states, $state;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* [1] Open file descriptors on useful files
|
/* [1] Open file descriptors on useful files
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$f_authlist = new SplFileObject(AUTH_LIST, 'r');
|
/* (1) Read accesses */
|
||||||
|
$f_auth = new SplFileObject(AUTH_LIST, 'r');
|
||||||
|
$f_states = new SplFileObject(STATES_CONF, 'r');
|
||||||
|
$f_actions = new SplFileObject(ACTIONS_CONF, 'r');
|
||||||
|
$f_gstate = @file_get_contents(STATE_CONF);
|
||||||
|
|
||||||
|
/* (2) Append accesses (logs) */
|
||||||
$f_accesslog = new SplFileObject(ACCESS_LOG, 'a');
|
$f_accesslog = new SplFileObject(ACCESS_LOG, 'a');
|
||||||
|
|
||||||
/* [2] Parse @authlist to cache [action]=>[rfid1, rfid2, ..]
|
|
||||||
=========================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/* [3] Initialize global variables
|
/* [2] Parse ACTIONS and cache them
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
$last_card = null;
|
/* (1) Parse each line */
|
||||||
$times = 0;
|
while( $f_actions->eof() ){
|
||||||
|
|
||||||
|
/* (2) Try to parse line */
|
||||||
|
$parsed = json_decode($f_actions->fgets(), true);
|
||||||
|
|
||||||
|
/* (2) Ignore if parse error */
|
||||||
|
if( is_null($parsed) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (3) Add key (timeout) to cache */
|
||||||
|
if( !isset($actions[$parsed[0]] )
|
||||||
|
$actions[$parsed[0]] = [];
|
||||||
|
|
||||||
|
/* (4) Add entry to cache */
|
||||||
|
$actions[$parsed[0]][] = [
|
||||||
|
'id' => $parsed[1],
|
||||||
|
'prev' => $parsed[2],
|
||||||
|
'next' => $parsed[3],
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (5) Free file descriptor */
|
||||||
|
$f_actions = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [3] Parse STATES and cache them
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Parse each line */
|
||||||
|
while( $f_states->eof() ){
|
||||||
|
|
||||||
|
/* (2) Try to parse line */
|
||||||
|
$parsed = json_decode($f_states->fgets(), true);
|
||||||
|
|
||||||
|
/* (2) Ignore if parse error */
|
||||||
|
if( is_null($parsed) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* (3) Add entry to cache */
|
||||||
|
$states[] = $parsed;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (4) Free file descriptor */
|
||||||
|
$f_states = null;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* [4] Cache global state
|
||||||
|
=========================================================*/
|
||||||
|
/* (1) Check file */
|
||||||
|
if( $f_gstate === false )
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* (2) Remove external spaces */
|
||||||
|
$f_gstate = preg_replace('@^\s+@', '', $f_gstate);
|
||||||
|
$f_gstate = preg_replace('@\s+$@', '', $f_gstate);
|
||||||
|
|
||||||
|
/* (3) For each character create an entry */
|
||||||
|
for( $c = 0 ; $c < strlen($f_gstate) ; $c++ )
|
||||||
|
$state[] = $c;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +180,11 @@
|
||||||
|
|
||||||
function mfrc522_loop(){
|
function mfrc522_loop(){
|
||||||
|
|
||||||
|
/* [1] Load global variables
|
||||||
|
=========================================================*/
|
||||||
|
global $last_user;
|
||||||
|
global $timeout;
|
||||||
|
|
||||||
/* [1] Wait for rfid card
|
/* [1] Wait for rfid card
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
while( ($code=syscall(SOURCE_DIR.'/lib/mfrc522/read')) === false );
|
while( ($code=syscall(SOURCE_DIR.'/lib/mfrc522/read')) === false );
|
||||||
|
@ -48,10 +198,32 @@
|
||||||
|
|
||||||
/* [2] Check for user in auth list
|
/* [2] Check for user in auth list
|
||||||
=========================================================*/
|
=========================================================*/
|
||||||
|
/* (0) CHECK FOR USER INFO IN AUTH LIST
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
$user = auth($code);
|
||||||
|
|
||||||
|
|
||||||
|
/* (1) UNKNOWN USER -> reset count
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
if( is_null($user) ){
|
||||||
|
|
||||||
|
$last_user = null;
|
||||||
|
$timeout = 1;
|
||||||
|
|
||||||
|
|
||||||
|
/* (2) KNOWN USER -> Manage timeout
|
||||||
|
---------------------------------------------------------*/
|
||||||
|
}else{
|
||||||
|
|
||||||
|
/* (1) If same as last -> increment @timeout */
|
||||||
|
if( $last_user == $user['id'] )
|
||||||
|
$timeout++;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* [3] Manage action (states)
|
|
||||||
=========================================================*/
|
|
||||||
|
|
||||||
|
|
||||||
/* [n] Wait for 0.5 s before reading again
|
/* [n] Wait for 0.5 s before reading again
|
||||||
|
|
Loading…
Reference in New Issue