Selaa lähdekoodia

Add AutolinkService

Daniel Supernault 3 vuotta sitten
vanhempi
commit
639e9859ed
1 muutettua tiedostoa jossa 54 lisäystä ja 0 poistoa
  1. 54 0
      app/Services/AutolinkService.php

+ 54 - 0
app/Services/AutolinkService.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Services;
+
+use Cache;
+use App\Profile;
+use Illuminate\Support\Str;
+use Illuminate\Support\Facades\Http;
+use App\Util\Webfinger\WebfingerUrl;
+
+class AutolinkService
+{
+	const CACHE_KEY = 'pf:services:autolink:';
+
+	public static function mentionedUsernameExists($username)
+	{
+		$key = 'pf:services:autolink:userexists:' . hash('sha256', $username);
+
+		return Cache::remember($key, 3600, function() use($username) {
+			$remote = Str::of($username)->contains('@');
+			$profile = Profile::whereUsername($username)->first();
+			if($profile) {
+				if($profile->domain != null) {
+					$instance = InstanceService::getByDomain($profile->domain);
+					if($instance && $instance->banned == true) {
+						return false;
+					}
+				}
+				return true;
+			} else {
+				if($remote) {
+					$parts = explode('@', $username);
+					$domain = last($parts);
+					$instance = InstanceService::getByDomain($domain);
+
+					if($instance) {
+						if($instance->banned == true) {
+							return false;
+						} else {
+							$wf = WebfingerUrl::generateWebfingerUrl($username);
+							$res = Http::head($wf);
+							return $res->ok();
+						}
+					} else {
+						$wf = WebfingerUrl::generateWebfingerUrl($username);
+						$res = Http::head($wf);
+						return $res->ok();
+					}
+				}
+			}
+			return false;
+		});
+	}
+}