Update DirectMessageController

This commit is contained in:
Daniel Supernault 2020-11-18 23:07:00 -07:00
parent da4c5fb808
commit f796cc7c11
No known key found for this signature in database
GPG key ID: 0DEF1C662C9033F7
3 changed files with 77 additions and 68 deletions

View file

@ -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',