| 
									
										
										
										
											2020-11-05 16:54:04 +03:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2021-03-18 18:26:03 +01:00
										 |  |  | class Telegram | 
					
						
							| 
									
										
										
										
											2020-11-05 16:54:04 +03:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-18 18:26:03 +01:00
										 |  |  |   /** | 
					
						
							|  |  |  |    * Get telegram user data | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    * Gets telegram user data from cookie and save it to array | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    * @return void | 
					
						
							|  |  |  |    * | 
					
						
							|  |  |  |    * @author Telegram | 
					
						
							|  |  |  |    * | 
					
						
							|  |  |  |    * | 
					
						
							|  |  |  |    * @since 0.1 | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   function getTelegramUserData() | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     if (isset($_COOKIE['tg_user'])) { | 
					
						
							|  |  |  |       $auth_data_json = urldecode($_COOKIE['tg_user']); | 
					
						
							|  |  |  |       $auth_data = json_decode($auth_data_json, true); | 
					
						
							|  |  |  |       return $auth_data; | 
					
						
							| 
									
										
										
										
											2020-11-05 16:54:04 +03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-03-18 18:26:03 +01:00
										 |  |  |     return false; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   /**  | 
					
						
							|  |  |  |    * Check if data is from telegram | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    * This checks if the data provides is from telegram. It includes a Fix for firefox | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    * @param mixed $auth_data The Authentication Data | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    * @return $auth_data | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   function checkTelegramAuthorization($auth_data) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     $check_hash = $auth_data['hash']; | 
					
						
							|  |  |  |     unset($auth_data['hash']); | 
					
						
							|  |  |  |     $data_check_arr = []; | 
					
						
							|  |  |  |     foreach ($auth_data as $key => $value) { | 
					
						
							|  |  |  |       // $data_check_arr[] = $key . '=' . $value;
 | 
					
						
							|  |  |  |       $data_check_arr[] = $key . '=' . str_replace('https:/t', 'https://t', $value); | 
					
						
							| 
									
										
										
										
											2020-11-05 16:54:04 +03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-03-18 18:26:03 +01:00
										 |  |  |     sort($data_check_arr); | 
					
						
							|  |  |  |     $data_check_string = implode("\n", $data_check_arr); | 
					
						
							|  |  |  |     $secret_key = hash('sha256', TG_BOT_API_TOKEN, true); | 
					
						
							|  |  |  |     $hash = hash_hmac('sha256', $data_check_string, $secret_key); | 
					
						
							|  |  |  |     if (strcmp($hash, $check_hash) !== 0) { | 
					
						
							|  |  |  |       throw new Exception('Data is NOT from Telegram'); | 
					
						
							| 
									
										
										
										
											2020-11-05 16:54:04 +03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-03-18 18:26:03 +01:00
										 |  |  |     if ((time() - $auth_data['auth_date']) > 86400) { | 
					
						
							|  |  |  |       throw new Exception('Data is outdated'); | 
					
						
							| 
									
										
										
										
											2020-11-05 16:54:04 +03:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-03-18 18:26:03 +01:00
										 |  |  |     return $auth_data; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * Save telegram userdata | 
					
						
							|  |  |  |    *  | 
					
						
							|  |  |  |    * Save the telegram user data in a cookie | 
					
						
							|  |  |  |    *  @return void | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   function saveTelegramUserData($auth_data) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     $auth_data_json = json_encode($auth_data); | 
					
						
							|  |  |  |     setcookie('tg_user', $auth_data_json); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   function get_telegram_subscriberid($user) | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     global $mysqli; | 
					
						
							|  |  |  |     $stmt = $mysqli->prepare("SELECT subscriberID FROM subscribers WHERE typeID=1 AND userID LIKE ? LIMIT 1"); | 
					
						
							|  |  |  |     $stmt->bind_param("s", $user); | 
					
						
							|  |  |  |     $stmt->execute(); | 
					
						
							|  |  |  |     $result = $stmt->get_result(); | 
					
						
							|  |  |  |     if ($result->num_rows) { | 
					
						
							|  |  |  |       $row = $result->fetch_assoc(); | 
					
						
							|  |  |  |       $subscriberID = $row['subscriberID']; | 
					
						
							|  |  |  |       return $subscriberID; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return null;  // Return null on false          
 | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |