simple tokenized loginsystem
This commit is contained in:
		
							parent
							
								
									8f2311df0b
								
							
						
					
					
						commit
						f5371aba5d
					
				
					 5 changed files with 124 additions and 10 deletions
				
			
		|  | @ -53,6 +53,15 @@ class DataBase extends SQLite3 { | |||
| 			FOREIGN KEY (personaid) REFERENCES personas(id) ON UPDATE CASCADE ON DELETE CASCADE | ||||
| 			); | ||||
| 
 | ||||
| 			CREATE TABLE IF NOT EXISTS tokens ( | ||||
| 			id	INTEGER	PRIMARY KEY	AUTOINCREMENT	UNIQUE, | ||||
| 			userid	INTEGER	NOT NULL, | ||||
| 			token	TEXT	NOT NULL	UNIQUE, | ||||
| 			lastuse	TEXT	NOT NULL, | ||||
| 			expires	TEXT	NOT NULL, | ||||
| 			FOREIGN KEY (userid) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE | ||||
| 			); | ||||
| 
 | ||||
| 			INSERT OR IGNORE INTO users (id, handle, name, about) VALUES ('0', 'SYSTEM', 'SYSTEM', 'SYSTEM'); | ||||
| 
 | ||||
| 		";
 | ||||
|  | @ -70,6 +79,16 @@ class DataBase extends SQLite3 { | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function getUserByHandle($handle) { | ||||
| 		$handle = $this->escapeString($handle); | ||||
| 		$sql = "SELECT * FROM users AS user WHERE handle='$handle';"; | ||||
| 		$ret = $this->query($sql)->fetchArray(SQLITE3_ASSOC); | ||||
| 		if(!$ret) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		return $ret; | ||||
| 	} | ||||
| 
 | ||||
| 	function addPost($text, $userid=NULL, $personaid=NULL) { | ||||
| 		$id = hexdec(uniqid()); | ||||
| 		$time = time(); | ||||
|  | @ -109,6 +128,56 @@ class DataBase extends SQLite3 { | |||
| 		return password_verify($password, $dbhash); | ||||
| 	} | ||||
| 
 | ||||
| 	function tokenGen() { | ||||
| 		return random_bytes(32); | ||||
| 	} | ||||
| 	function tokenAdd($userid) { | ||||
| 		$token = $this->tokenGen(); | ||||
| 		$hashed = hash('sha256', $token); | ||||
| 		$time = time(); | ||||
| 		$expires = $time + 2592000; // 30 days
 | ||||
| 		$sql = "INSERT INTO tokens (userid, token, lastuse, expires) VALUES ('$userid', '$hashed', '$time', '$expires');"; | ||||
| 		$ret = $this->exec($sql); | ||||
| 		if(!$ret) { | ||||
| 			die($this->lastErrorMsg()); | ||||
| 		} | ||||
| 		return $token; | ||||
| 	} | ||||
| 	function tokenRefresh($tokenid) { | ||||
| 		$time = time(); | ||||
| 		$expires = $time + 2592000; // 30 days
 | ||||
| 		$sql = "UPDATE tokens SET lastuse='$time', expires='$expires' WHERE id='$tokenid';"; | ||||
| 		$ret = $this->exec($sql); | ||||
| 		if(!$ret) { | ||||
| 			die($this->lastErrorMsg()); | ||||
| 		} | ||||
| 	} | ||||
| 	function tokenRemove($token) { | ||||
| 		$hashed = hash('sha256', $token); | ||||
| 		$sql = "DELETE FROM tokens WHERE token='$hashed';"; | ||||
| 		$ret = $this->exec($sql); | ||||
| 		if(!$ret) { | ||||
| 			die($this->lastErrorMsg()); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function getAuthedUserId($token=NULL) { | ||||
| 		if (empty($token)) {  | ||||
| 			if (empty($_COOKIE['token'])) { | ||||
| 				return false; | ||||
| 			} | ||||
| 			$token = base64_decode($_COOKIE['token']); | ||||
| 		} | ||||
| 		$hashed = hash('sha256', $token); | ||||
| 		$sql = "SELECT id AS id, userid AS userid FROM tokens WHERE token='$hashed';"; | ||||
| 		$ret = $this->query($sql)->fetchArray(SQLITE3_ASSOC); | ||||
| 		if(!$ret) { | ||||
| 			return false; | ||||
| 		} | ||||
| 		$this->tokenRefresh($ret['id']); | ||||
| 		return $ret['userid']; | ||||
| 	} | ||||
| 
 | ||||
| 	function getPosts($userid=NULL, $personaid = NULL) { | ||||
| 		$sql = "SELECT * FROM posts AS post LEFT JOIN users AS user ON post.userid=user.id LEFT JOIN personas AS persona ON post.personaid=persona.id;"; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue