| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | namespace Grocy\Services; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SessionService extends BaseService | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | { | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @return boolean | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 	public function IsValidSession($sessionKey) | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		if ($sessionKey === null || empty($sessionKey)) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2018-04-21 19:18:00 +02:00
										 |  |  | 			$sessionRow = $this->Database->sessions()->where('session_key = :1 AND expires > :2', $sessionKey, date('Y-m-d H:i:s', time()))->fetch(); | 
					
						
							|  |  |  | 			if ($sessionRow !== null) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				$sessionRow->update(array( | 
					
						
							|  |  |  | 					'last_used' => date('Y-m-d H:i:s', time()) | 
					
						
							|  |  |  | 				)); | 
					
						
							|  |  |  | 				return true; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				return false; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @return string | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-09-24 13:16:57 +02:00
										 |  |  | 	public function CreateSession($userId, $stayLoggedInPermanently = false) | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-04-19 20:44:49 +02:00
										 |  |  | 		$newSessionKey = $this->GenerateSessionKey(); | 
					
						
							| 
									
										
										
										
											2018-04-14 11:10:38 +02:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											2018-10-16 18:21:38 +02:00
										 |  |  | 		$expires = date('Y-m-d H:i:s', intval(time() + 2592000)); // Default is that sessions expire in 30 days
 | 
					
						
							| 
									
										
										
										
											2018-09-24 13:16:57 +02:00
										 |  |  | 		if ($stayLoggedInPermanently === true) | 
					
						
							|  |  |  | 		{ | 
					
						
							| 
									
										
										
										
											2018-10-16 18:21:38 +02:00
										 |  |  | 			$expires = date('Y-m-d H:i:s', intval(time() + 31220640000)); // 999 years aka forever
 | 
					
						
							| 
									
										
										
										
											2018-09-24 13:16:57 +02:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-14 11:10:38 +02:00
										 |  |  | 		$sessionRow = $this->Database->sessions()->createRow(array( | 
					
						
							| 
									
										
										
										
											2018-07-24 19:31:43 +02:00
										 |  |  | 			'user_id' => $userId, | 
					
						
							| 
									
										
										
										
											2018-04-14 11:10:38 +02:00
										 |  |  | 			'session_key' => $newSessionKey, | 
					
						
							| 
									
										
										
										
											2018-09-24 13:16:57 +02:00
										 |  |  | 			'expires' => $expires | 
					
						
							| 
									
										
										
										
											2018-04-14 11:10:38 +02:00
										 |  |  | 		)); | 
					
						
							|  |  |  | 		$sessionRow->save(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | 		return $newSessionKey; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-11 19:49:35 +02:00
										 |  |  | 	public function RemoveSession($sessionKey) | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2018-04-14 11:10:38 +02:00
										 |  |  | 		$this->Database->sessions()->where('session_key', $sessionKey)->delete(); | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-19 20:44:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-24 19:31:43 +02:00
										 |  |  | 	public function GetUserBySessionKey($sessionKey) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$sessionRow = $this->Database->sessions()->where('session_key', $sessionKey)->fetch(); | 
					
						
							|  |  |  | 		if ($sessionRow !== null) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			return $this->Database->users($sessionRow->user_id); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return null; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 19:28:15 +02:00
										 |  |  | 	public function GetDefaultUser() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return $this->Database->users(1); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-19 20:44:49 +02:00
										 |  |  | 	private function GenerateSessionKey() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return RandomString(50); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-04-10 20:30:11 +02:00
										 |  |  | } |