1+ <?php
2+ class QRIN extends Core {
3+ // (A) INIT
4+ private $ nlen = 12 ; // 12 characters qr login random hash
5+ function __construct ($ core ) {
6+ parent ::__construct ($ core );
7+ $ core ->load ("Users " );
8+ }
9+
10+ // (B) CREATE NEW NFC LOGIN TOKEN
11+ // $id : user id
12+ function add ($ id ) {
13+ // (B1) UPDATE TOKEN
14+ $ token = $ this ->Core ->random ($ this ->nlen );
15+ $ this ->Users ->hashAdd ($ id , "QR " , password_hash ($ token , PASSWORD_DEFAULT ));
16+
17+ // (B2) RETURN ENCODED TOKEN
18+ require PATH_LIB . "JWT/autoload.php " ;
19+ return Firebase \JWT \JWT ::encode ([$ id , $ token ], JWT_SECRET , JWT_ALGO );
20+ }
21+
22+ // (C) NULLIFY QR TOKEN
23+ // $id : user id
24+ function del ($ id ) {
25+ $ this ->Users ->hashDel ($ id , "QR " );
26+ return true ;
27+ }
28+
29+ // (D) NFC TOKEN LOGIN
30+ function login ($ token ) {
31+ // (D1) DECODE TOKEN
32+ $ valid = true ;
33+ try {
34+ require PATH_LIB . "JWT/autoload.php " ;
35+ $ token = Firebase \JWT \JWT ::decode (
36+ $ token , new Firebase \JWT \Key (JWT_SECRET , JWT_ALGO )
37+ );
38+ $ valid = is_object ($ token );
39+ if ($ valid ) {
40+ $ token = (array ) $ token ;
41+ $ valid = count ($ token )==2 ;
42+ }
43+ } catch (Exception $ e ) { $ valid = false ; }
44+
45+ // (D2) VERIFY TOKEN
46+ if ($ valid ) {
47+ $ user = $ this ->Users ->get ($ token [0 ], "QR " );
48+ $ valid = (is_array ($ user ) && password_verify ($ token [1 ], $ user ["hash_code " ]));
49+ }
50+
51+ // (D3) SESSION START
52+ if ($ valid ) {
53+ $ _SESSION ["user " ] = $ user ;
54+ unset($ _SESSION ["user " ]["user_password " ]);
55+ unset($ _SESSION ["user " ]["hash_code " ]);
56+ unset($ _SESSION ["user " ]["hash_time " ]);
57+ unset($ _SESSION ["user " ]["hash_tries " ]);
58+ $ this ->Session ->save ();
59+ return true ;
60+ }
61+
62+ // (D4) NADA
63+ $ this ->error = "Invalid token " ;
64+ return false ;
65+ }
66+ }
0 commit comments