| 
									
										
										
										
											2021-04-21 05:11:43 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace App\Services; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Cache; | 
					
						
							|  |  |  | use App\Instance; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InstanceService | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2023-01-15 09:35:10 +00:00
										 |  |  |     const CACHE_KEY_BY_DOMAIN = 'pf:services:instance:by_domain:'; | 
					
						
							| 
									
										
										
										
											2022-03-13 06:32:31 +00:00
										 |  |  | 	const CACHE_KEY_BANNED_DOMAINS = 'instances:banned:domains'; | 
					
						
							|  |  |  | 	const CACHE_KEY_UNLISTED_DOMAINS = 'instances:unlisted:domains'; | 
					
						
							|  |  |  | 	const CACHE_KEY_NSFW_DOMAINS = 'instances:auto_cw:domains'; | 
					
						
							| 
									
										
										
										
											2023-03-19 11:29:54 +00:00
										 |  |  | 	const CACHE_KEY_STATS = 'pf:services:instances:stats'; | 
					
						
							| 
									
										
										
										
											2022-03-13 06:32:31 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-20 01:51:14 +00:00
										 |  |  | 	public static function getByDomain($domain) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2023-01-15 09:35:10 +00:00
										 |  |  | 		return Cache::remember(self::CACHE_KEY_BY_DOMAIN.$domain, 3600, function() use($domain) { | 
					
						
							| 
									
										
										
										
											2021-10-20 01:51:14 +00:00
										 |  |  | 			return Instance::whereDomain($domain)->first(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-21 05:11:43 +00:00
										 |  |  | 	public static function getBannedDomains() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2022-12-31 13:25:43 +00:00
										 |  |  | 		return Cache::remember(self::CACHE_KEY_BANNED_DOMAINS, 1209600, function() { | 
					
						
							| 
									
										
										
										
											2021-04-21 05:11:43 +00:00
										 |  |  | 			return Instance::whereBanned(true)->pluck('domain')->toArray(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function getUnlistedDomains() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2022-12-31 13:25:43 +00:00
										 |  |  | 		return Cache::remember(self::CACHE_KEY_UNLISTED_DOMAINS, 1209600, function() { | 
					
						
							| 
									
										
										
										
											2021-04-21 05:11:43 +00:00
										 |  |  | 			return Instance::whereUnlisted(true)->pluck('domain')->toArray(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	public static function getNsfwDomains() | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2022-12-31 13:25:43 +00:00
										 |  |  | 		return Cache::remember(self::CACHE_KEY_NSFW_DOMAINS, 1209600, function() { | 
					
						
							| 
									
										
										
										
											2021-04-21 05:11:43 +00:00
										 |  |  | 			return Instance::whereAutoCw(true)->pluck('domain')->toArray(); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-08-31 06:37:28 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	public static function software($domain) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		$key = 'instances:software:' . strtolower($domain); | 
					
						
							|  |  |  | 		return Cache::remember($key, 86400, function() use($domain) { | 
					
						
							|  |  |  | 			$instance = Instance::whereDomain($domain)->first(); | 
					
						
							|  |  |  | 			if(!$instance) { | 
					
						
							|  |  |  | 				return; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return $instance->software; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2023-01-15 09:35:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-19 11:29:54 +00:00
										 |  |  | 	public static function stats() | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return Cache::remember(self::CACHE_KEY_STATS, 86400, function() { | 
					
						
							|  |  |  | 			return [ | 
					
						
							|  |  |  | 				'total_count' => Instance::count(), | 
					
						
							|  |  |  | 				'new_count' => Instance::where('created_at', '>', now()->subDays(14))->count(), | 
					
						
							|  |  |  | 				'banned_count' => Instance::whereBanned(true)->count(), | 
					
						
							|  |  |  | 				'nsfw_count' => Instance::whereAutoCw(true)->count() | 
					
						
							|  |  |  | 			]; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-15 09:35:10 +00:00
										 |  |  |     public static function refresh() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         Cache::forget(self::CACHE_KEY_BANNED_DOMAINS); | 
					
						
							|  |  |  |         Cache::forget(self::CACHE_KEY_UNLISTED_DOMAINS); | 
					
						
							|  |  |  |         Cache::forget(self::CACHE_KEY_NSFW_DOMAINS); | 
					
						
							| 
									
										
										
										
											2023-03-19 11:29:54 +00:00
										 |  |  |         Cache::forget(self::CACHE_KEY_STATS); | 
					
						
							| 
									
										
										
										
											2023-01-15 09:35:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self::getBannedDomains(); | 
					
						
							|  |  |  |         self::getUnlistedDomains(); | 
					
						
							|  |  |  |         self::getNsfwDomains(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-04-21 05:11:43 +00:00
										 |  |  | } |