diff --git a/app/Http/Controllers/DirectMessageController.php b/app/Http/Controllers/DirectMessageController.php index ee6e16d66..2f8e9e639 100644 --- a/app/Http/Controllers/DirectMessageController.php +++ b/app/Http/Controllers/DirectMessageController.php @@ -19,6 +19,7 @@ use App\Services\MediaBlocklistService; use App\Jobs\StatusPipeline\NewStatusPipeline; use Illuminate\Support\Str; use App\Util\ActivityPub\Helpers; +use App\Services\WebfingerService; class DirectMessageController extends Controller { @@ -241,6 +242,7 @@ class DirectMessageController extends Controller $res = [ 'id' => (string) $dm->id, 'isAuthor' => $profile->id == $dm->from_id, + 'reportId' => (string) $dm->status_id, 'hidden' => (bool) $dm->is_hidden, 'type' => $dm->type, 'text' => $dm->status->caption, @@ -262,9 +264,9 @@ class DirectMessageController extends Controller $pid = $request->input('pid'); $max_id = $request->input('max_id'); $min_id = $request->input('min_id'); - + $r = Profile::findOrFail($pid); - // $r = Profile::whereNull('domain')->findOrFail($pid); +// $r = Profile::whereNull('domain')->findOrFail($pid); if($min_id) { $res = DirectMessage::select('*') @@ -319,10 +321,10 @@ class DirectMessageController extends Controller 'avatar' => $r->avatarUrl(), 'url' => $r->url(), 'muted' => UserFilter::whereUserId($uid) - ->whereFilterableId($r->id) - ->whereFilterableType('App\Profile') - ->whereFilterType('dm.mute') - ->first() ? true : false, + ->whereFilterableId($r->id) + ->whereFilterableType('App\Profile') + ->whereFilterType('dm.mute') + ->first() ? true : false, 'isLocal' => (bool) !$r->domain, 'domain' => $r->domain, 'timeAgo' => $r->created_at->diffForHumans(null, true, true), @@ -343,7 +345,8 @@ class DirectMessageController extends Controller $pid = $request->user()->profile_id; $dm = DirectMessage::whereFromId($pid) - ->findOrFail($sid); + ->whereStatusId($sid) + ->firstOrFail(); $status = Status::whereProfileId($pid) ->findOrFail($dm->status_id); @@ -452,6 +455,8 @@ class DirectMessageController extends Controller } return [ + 'id' => $dm->id, + 'reportId' => (string) $dm->status_id, 'type' => $dm->type, 'url' => $media->url() ]; @@ -460,12 +465,50 @@ class DirectMessageController extends Controller public function composeLookup(Request $request) { $this->validate($request, [ - 'username' => 'required' + 'q' => 'required|string|min:1|max:50', + 'remote' => 'nullable|boolean', ]); - $username = $request->input('username'); - $profile = Profile::whereUsername($username)->firstOrFail(); - return ['id' => (string)$profile->id]; + $q = $request->input('q'); + $r = $request->input('remote'); + + if($r && Helpers::validateUrl($q)) { + Helpers::profileFetch($q); + } + + if(Str::of($q)->startsWith('@')) { + if(strlen($q) < 3) { + return []; + } + if(substr_count($q, '@') == 2) { + WebfingerService::lookup($q); + } + $q = mb_substr($q, 1); + } + + $blocked = UserFilter::whereFilterableType('App\Profile') + ->whereFilterType('block') + ->whereFilterableId($request->user()->profile_id) + ->pluck('user_id'); + + $blocked->push($request->user()->profile_id); + + $results = Profile::select('id','domain','username') + ->whereNotIn('id', $blocked) + ->where('username','like','%'.$q.'%') + ->limit(15) + ->get() + ->map(function($r) { + return [ + 'local' => (bool) !$r->domain, + 'id' => (string) $r->id, + 'name' => $r->username, + 'privacy' => true, + 'avatar' => $r->avatarUrl() + ]; + }); + + return $results; } public function read(Request $request) @@ -509,7 +552,7 @@ class DirectMessageController extends Controller 'filter_type' => 'dm.mute' ] ); - + return [200]; } @@ -529,6 +572,7 @@ class DirectMessageController extends Controller ->firstOrFail(); $f->delete(); + return [200]; } @@ -536,6 +580,7 @@ class DirectMessageController extends Controller { $profile = $dm->author; $url = $dm->recipient->inbox_url; + $tags = [ [ 'type' => 'Mention', @@ -543,6 +588,7 @@ class DirectMessageController extends Controller 'name' => $dm->recipient->emailUrl(), ] ]; + $body = [ '@context' => [ 'https://www.w3.org/ns/activitystreams', diff --git a/resources/assets/js/components/Direct.vue b/resources/assets/js/components/Direct.vue index 20dc3205e..5682a7b60 100644 --- a/resources/assets/js/components/Direct.vue +++ b/resources/assets/js/components/Direct.vue @@ -6,7 +6,7 @@
-
-
- Select Recipient