From 063fd8a7f42277295288c47735f6bf9d6ce8d868 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 19:18:35 -0700 Subject: [PATCH 01/25] Update Remove view, use new iOS toggle --- resources/views/settings/remove/permanent.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/settings/remove/permanent.blade.php b/resources/views/settings/remove/permanent.blade.php index 91eb5987f..b95aa2894 100644 --- a/resources/views/settings/remove/permanent.blade.php +++ b/resources/views/settings/remove/permanent.blade.php @@ -22,7 +22,7 @@

@csrf -
+
From e048a03d6bdcf437073219cfd15c448c5cd94188 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 19:18:52 -0700 Subject: [PATCH 02/25] Add temporary account disable view --- .../views/settings/remove/temporary.blade.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 resources/views/settings/remove/temporary.blade.php diff --git a/resources/views/settings/remove/temporary.blade.php b/resources/views/settings/remove/temporary.blade.php new file mode 100644 index 000000000..21ec25ace --- /dev/null +++ b/resources/views/settings/remove/temporary.blade.php @@ -0,0 +1,30 @@ +@extends('settings.template') + +@section('section') + +
+

Temporarily Disable Your Account

+
+
+
+

Hi {{Auth::user()->username}},

+ +

You can disable your account instead of deleting it. This means your account will be hidden until you reactivate it by logging back in.

+ +

You can only disable your account once a week.

+ +

Keeping Your Data Safe

+

Nothing is more important to us than the safety and security of this community. People put their trust in us by sharing moments of their lives on Pixelfed. So we will never make any compromises when it comes to safeguarding your data.

+ +

When you press the button below, your photos, comments and likes will be hidden until you reactivate your account by logging back in.

+ +

+ + @csrf + +

+

+
+ + +@endsection \ No newline at end of file From b5bee7b87d56c84a59c9b099bbddc9828c7fb182 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 19:42:04 -0700 Subject: [PATCH 03/25] Add inbox route --- routes/api.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/routes/api.php b/routes/api.php index 852967954..74c67eaf9 100644 --- a/routes/api.php +++ b/routes/api.php @@ -12,3 +12,5 @@ use Illuminate\Http\Request; | is assigned the "api" middleware group. Enjoy building your API! | */ + +Route::post('/users/{username}/inbox', 'FederationController@userInbox'); From 7f88500d1813bbc07c15e350934c59a2b763bea4 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 19:42:50 -0700 Subject: [PATCH 04/25] Remove AP logger from Inbox --- app/Util/ActivityPub/Inbox.php | 83 ++++++++++++++++------------------ 1 file changed, 39 insertions(+), 44 deletions(-) diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index 83d5578f9..abf6ed5f3 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -32,7 +32,7 @@ class Inbox public function handle() { - $this->authenticatePayload(); + $this->handleVerb(); } public function authenticatePayload() @@ -142,16 +142,11 @@ class Inbox $activity = $this->payload['object']; $actor = $this->actorFirstOrCreate($this->payload['actor']); $inReplyTo = $activity['inReplyTo']; + $url = $activity['id']; - if(!Helpers::statusFirstOrFetch($activity['url'], true)) { - $this->logger->delete(); + if(!Helpers::statusFirstOrFetch($url, true)) { return; } - - $this->logger->to_id = $this->profile->id; - $this->logger->from_id = $actor->id; - $this->logger->processed_at = Carbon::now(); - $this->logger->save(); } public function handleNoteCreate() @@ -164,12 +159,11 @@ class Inbox if(Helpers::userInAudience($this->profile, $this->payload) == false) { //Log::error('AP:inbox:userInAudience:false - Activity#'.$this->logger->id); - $logger = Activity::find($this->logger->id); - $logger->delete(); return; } - if(Status::whereUrl($activity['url'])->exists()) { + $url = $activity['id']; + if(Status::whereUrl($url)->exists()) { return; } @@ -178,18 +172,12 @@ class Inbox $status->profile_id = $actor->id; $status->caption = strip_tags($activity['content']); $status->visibility = $status->scope = 'public'; - $status->url = $activity['url']; + $status->url = $url; $status->save(); return $status; }); Helpers::importNoteAttachment($activity, $status); - - $logger = Activity::find($this->logger->id); - $logger->to_id = $this->profile->id; - $logger->from_id = $actor->id; - $logger->processed_at = Carbon::now(); - $logger->save(); } public function handleFollowActivity() @@ -214,7 +202,6 @@ class Inbox 'local_profile' => empty($actor->domain) ]); if($follower->wasRecentlyCreated == false) { - $this->logger->delete(); return; } // send notification @@ -228,37 +215,53 @@ class Inbox $notification->item_type = "App\Profile"; $notification->save(); - \Cache::forever('notification.'.$notification->id, $notification); - - $redis = Redis::connection(); - - $nkey = config('cache.prefix').':user.'.$target->id.'.notifications'; - $redis->lpush($nkey, $notification->id); - // send Accept to remote profile $accept = [ '@context' => 'https://www.w3.org/ns/activitystreams', - 'id' => $follower->permalink('/accept'), + 'id' => $target->permalink().'#accepts/follows/', 'type' => 'Accept', 'actor' => $target->permalink(), 'object' => [ - 'id' => $this->payload['id'], + 'id' => $actor->permalink('#follows/'.$target->id), 'type' => 'Follow', - 'actor' => $target->permalink(), - 'object' => $actor->permalink() + 'actor' => $actor->permalink(), + 'object' => $target->permalink() ] ]; Helpers::sendSignedObject($target, $actor->inbox_url, $accept); } - $this->logger->to_id = $target->id; - $this->logger->from_id = $actor->id; - $this->logger->processed_at = Carbon::now(); - $this->logger->save(); } public function handleAnnounceActivity() { - + $actor = $this->actorFirstOrCreate($this->payload['actor']); + $activity = $this->payload['object']; + if(!$actor || $actor->domain == null) { + return; + } + if(Helpers::validateLocalUrl($activity) == false) { + return; + } + $parent = Helpers::statusFirstOrFetch($activity, true); + if(!$parent) { + return; + } + $status = Status::firstOrCreate([ + 'profile_id' => $actor->id, + 'in_reply_to_id' => $parent->id, + 'type' => 'reply' + ]); + if($status->wasRecentlyCreated) { + $notification = new Notification(); + $notification->profile_id = $parent->profile->id; + $notification->actor_id = $actor->id; + $notification->action = 'comment'; + $notification->message = $status->toText(); + $notification->rendered = $status->toHtml(); + $notification->item_id = $parent->id; + $notification->item_type = "App\Status"; + $notification->save(); + } } public function handleAcceptActivity() @@ -289,10 +292,6 @@ class Inbox return; } LikePipeline::dispatch($like); - $this->logger->to_id = $status->profile_id; - $this->logger->from_id = $profile->id; - $this->logger->processed_at = Carbon::now(); - $this->logger->save(); } @@ -306,19 +305,15 @@ class Inbox $actor = $this->payload['actor']; $profile = self::actorFirstOrCreate($actor); $obj = $this->payload['object']; - $status = Helpers::statusFirstOrFetch($obj['object']); switch ($obj['type']) { case 'Like': + $status = Helpers::statusFirstOrFetch($obj['object']); Like::whereProfileId($profile->id) ->whereStatusId($status->id) ->delete(); break; } - $this->logger->to_id = $status->profile_id; - $this->logger->from_id = $profile->id; - $this->logger->processed_at = Carbon::now(); - $this->logger->save(); } } From 3109911887775fb628c96287973ee0642145aab6 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 21:03:37 -0700 Subject: [PATCH 05/25] Update InternalApiController --- app/Http/Controllers/InternalApiController.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/Http/Controllers/InternalApiController.php b/app/Http/Controllers/InternalApiController.php index fb4cdcde9..e2c6b24ca 100644 --- a/app/Http/Controllers/InternalApiController.php +++ b/app/Http/Controllers/InternalApiController.php @@ -112,6 +112,7 @@ class InternalApiController extends Controller $people = Profile::select('id', 'name', 'username') ->with('avatar') + ->whereNull('status') ->orderByRaw('rand()') ->whereHas('statuses') ->whereNull('domain') @@ -206,6 +207,9 @@ class InternalApiController extends Controller $posts = Status::select('id', 'caption', 'profile_id') ->whereHas('media') + ->whereHas('profile', function($q) { + return $q->whereNull('status'); + }) ->whereIsNsfw(false) ->whereVisibility('public') ->whereNotIn('profile_id', $following) From de491710276677f8cb6c2e9d271db357b3769619 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 21:50:35 -0700 Subject: [PATCH 06/25] Update PublicApiController --- app/Http/Controllers/PublicApiController.php | 26 ++++++++++++-------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index 6260b2f90..779716fe3 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -43,6 +43,9 @@ class PublicApiController extends Controller return []; } else { $profile = Auth::user()->profile; + if($profile->status) { + return []; + } $user = new Fractal\Resource\Item($profile, new AccountTransformer()); return $this->fractal->createData($user)->toArray(); } @@ -54,6 +57,9 @@ class PublicApiController extends Controller return []; } else { $profile = Auth::user()->profile; + if($profile->status) { + return []; + } $likes = $status->likedBy()->orderBy('created_at','desc')->paginate(10); $collection = new Fractal\Resource\Collection($likes, new AccountTransformer()); return $this->fractal->createData($collection)->toArray(); @@ -74,8 +80,8 @@ class PublicApiController extends Controller public function status(Request $request, $username, int $postid) { - $profile = Profile::whereUsername($username)->first(); - $status = Status::whereProfileId($profile->id)->find($postid); + $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); + $status = Status::whereProfileId($profile->id)->findOrFail($postid); $this->scopeCheck($profile, $status); $item = new Fractal\Resource\Item($status, new StatusTransformer()); $res = [ @@ -100,8 +106,8 @@ class PublicApiController extends Controller 'limit' => 'nullable|integer|min:5|max:50' ]); $limit = $request->limit ?? 10; - $profile = Profile::whereUsername($username)->first(); - $status = Status::whereProfileId($profile->id)->find($postId); + $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); + $status = Status::whereProfileId($profile->id)->findOrFail($postId); $this->scopeCheck($profile, $status); if($request->filled('min_id') || $request->filled('max_id')) { if($request->filled('min_id')) { @@ -133,8 +139,8 @@ class PublicApiController extends Controller public function statusLikes(Request $request, $username, $id) { - $profile = Profile::whereUsername($username)->first(); - $status = Status::whereProfileId($profile->id)->find($id); + $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); + $status = Status::whereProfileId($profile->id)->findOrFail($id); $this->scopeCheck($profile, $status); $likes = $this->getLikes($status); return response()->json([ @@ -144,8 +150,8 @@ class PublicApiController extends Controller public function statusShares(Request $request, $username, $id) { - $profile = Profile::whereUsername($username)->first(); - $status = Status::whereProfileId($profile->id)->find($id); + $profile = Profile::whereUsername($username)->whereNull('status')->firstOrFail(); + $status = Status::whereProfileId($profile->id)->findOrFail($id); $this->scopeCheck($profile, $status); $shares = $this->getShares($status); return response()->json([ @@ -210,7 +216,7 @@ class PublicApiController extends Controller // $timeline = Timeline::build()->local(); $pid = Auth::user()->profile->id; - $private = Profile::whereIsPrivate(true)->where('id', '!=', $pid)->pluck('id'); + $private = Profile::whereIsPrivate(true)->orWhereNotNull('status')->where('id', '!=', $pid)->pluck('id'); $filters = UserFilter::whereUserId($pid) ->whereFilterableType('App\Profile') ->whereIn('filter_type', ['mute', 'block']) @@ -272,7 +278,7 @@ class PublicApiController extends Controller $following = Follower::whereProfileId($pid)->pluck('following_id'); $following->push($pid)->toArray(); - $private = Profile::whereIsPrivate(true)->where('id', '!=', $pid)->pluck('id'); + $private = Profile::whereIsPrivate(true)->orWhereNotNull('status')->where('id', '!=', $pid)->pluck('id'); $filters = UserFilter::whereUserId($pid) ->whereFilterableType('App\Profile') ->whereIn('filter_type', ['mute', 'block']) From d4c347ffa93f6d240babcf8856dafd0aced6611a Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 21:51:44 -0700 Subject: [PATCH 07/25] Update FollowerController --- app/Http/Controllers/FollowerController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/FollowerController.php b/app/Http/Controllers/FollowerController.php index 808effa10..e312a2938 100644 --- a/app/Http/Controllers/FollowerController.php +++ b/app/Http/Controllers/FollowerController.php @@ -37,7 +37,7 @@ class FollowerController extends Controller protected function handleFollowRequest($item) { $user = Auth::user()->profile; - $target = Profile::where('id', '!=', $user->id)->findOrFail($item); + $target = Profile::where('id', '!=', $user->id)->whereNull('status')->findOrFail($item); $private = (bool) $target->is_private; $blocked = UserFilter::whereUserId($target->id) ->whereFilterType('block') From 4bce09b28ed74405f1358cc198618af8ae9e74c1 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 22:00:54 -0700 Subject: [PATCH 08/25] Update ProfileController --- app/Http/Controllers/ProfileController.php | 50 +++++++++++++++++++--- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 3d5137f49..070fc3086 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -20,7 +20,11 @@ class ProfileController extends Controller public function show(Request $request, $username) { $user = Profile::whereUsername($username)->firstOrFail(); - return $this->buildProfile($request, $user); + if($user->status != null) { + return $this->accountCheck($user); + } else { + return $this->buildProfile($request, $user); + } } // TODO: refactor this mess @@ -30,7 +34,11 @@ class ProfileController extends Controller $loggedIn = Auth::check(); $isPrivate = false; $isBlocked = false; - + + if($user->status != null) { + return ProfileController::accountCheck($user); + } + if ($user->remote_url) { $settings = new \StdClass; $settings->crawlable = false; @@ -118,8 +126,27 @@ class ProfileController extends Controller return false; } + public static function accountCheck(Profile $profile) + { + switch ($profile->status) { + case 'disabled': + case 'delete': + return view('profile.disabled'); + break; + + default: + # code... + break; + } + + return abort(404); + } + public function showActivityPub(Request $request, $user) { + if($user->status != null) { + return ProfileController::accountCheck($user); + } $fractal = new Fractal\Manager(); $resource = new Fractal\Resource\Item($user, new ProfileTransformer); $res = $fractal->createData($resource)->toArray(); @@ -129,6 +156,9 @@ class ProfileController extends Controller public function showAtomFeed(Request $request, $user) { $profile = $user = Profile::whereUsername($user)->firstOrFail(); + if($profile->status != null) { + return $this->accountCheck($profile); + } if($profile->is_private || Auth::check()) { $blocked = $this->blockedProfileCheck($profile); $check = $this->privateProfileCheck($profile, null); @@ -144,7 +174,9 @@ class ProfileController extends Controller public function followers(Request $request, $username) { $profile = $user = Profile::whereUsername($username)->firstOrFail(); - + if($profile->status != null) { + return $this->accountCheck($profile); + } // TODO: fix $profile/$user mismatch in profile & follower templates $owner = Auth::check() && Auth::id() === $user->user_id; $is_following = ($owner == false && Auth::check()) ? $user->followedBy(Auth::user()->profile) : false; @@ -155,7 +187,7 @@ class ProfileController extends Controller return view('profile.private', compact('user', 'is_following')); } } - $followers = $profile->followers()->orderBy('created_at', 'desc')->simplePaginate(12); + $followers = $profile->followers()->whereNull('status')->orderBy('created_at', 'desc')->simplePaginate(12); $is_admin = is_null($user->domain) ? $user->user->is_admin : false; if ($user->remote_url) { $settings = new \StdClass; @@ -172,6 +204,9 @@ class ProfileController extends Controller public function following(Request $request, $username) { $profile = $user = Profile::whereUsername($username)->firstOrFail(); + if($profile->status != null) { + return $this->accountCheck($profile); + } // TODO: fix $profile/$user mismatch in profile & follower templates $owner = Auth::check() && Auth::id() === $user->user_id; $is_following = ($owner == false && Auth::check()) ? $user->followedBy(Auth::user()->profile) : false; @@ -182,7 +217,7 @@ class ProfileController extends Controller return view('profile.private', compact('user', 'is_following')); } } - $following = $profile->following()->orderBy('created_at', 'desc')->simplePaginate(12); + $following = $profile->following()->whereNull('status')->orderBy('created_at', 'desc')->simplePaginate(12); $is_admin = is_null($user->domain) ? $user->user->is_admin : false; if ($user->remote_url) { $settings = new \StdClass; @@ -201,7 +236,10 @@ class ProfileController extends Controller if (Auth::check() === false || $username !== Auth::user()->username) { abort(403); } - $user = Auth::user()->profile; + $user = $profile = Auth::user()->profile; + if($profile->status != null) { + return $this->accountCheck($profile); + } $settings = User::whereUsername($username)->firstOrFail()->settings; $owner = true; $following = false; From 9608307243d98680aaa296ce85b8155ec9ea93c6 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 22:01:15 -0700 Subject: [PATCH 09/25] Update StatusController --- app/Http/Controllers/StatusController.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/Http/Controllers/StatusController.php b/app/Http/Controllers/StatusController.php index 8c04bbf4a..a32817faa 100644 --- a/app/Http/Controllers/StatusController.php +++ b/app/Http/Controllers/StatusController.php @@ -21,10 +21,22 @@ class StatusController extends Controller { $user = Profile::whereUsername($username)->firstOrFail(); + if($user->status != null) { + return ProfileController::accountCheck($user); + } + $status = Status::whereProfileId($user->id) ->whereNotIn('visibility',['draft','direct']) ->findOrFail($id); + if($status->uri) { + $url = $status->uri; + if(ends_with($url, '/activity')) { + $url = str_replace('/activity', '', $url); + } + return redirect($url); + } + if($status->visibility == 'private' || $user->is_private) { if(!Auth::check()) { abort(403); From a65f2e713cd6d7a7b79f9e9160b52279e931aa7f Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 22:02:11 -0700 Subject: [PATCH 10/25] Add new migration --- ..._032921_add_delete_after_to_user_table.php | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 database/migrations/2018_12_24_032921_add_delete_after_to_user_table.php diff --git a/database/migrations/2018_12_24_032921_add_delete_after_to_user_table.php b/database/migrations/2018_12_24_032921_add_delete_after_to_user_table.php new file mode 100644 index 000000000..70ea6bd2e --- /dev/null +++ b/database/migrations/2018_12_24_032921_add_delete_after_to_user_table.php @@ -0,0 +1,40 @@ +timestamp('delete_after')->nullable(); + }); + + Schema::table('users', function (Blueprint $table) { + $table->timestamp('delete_after')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('profiles', function (Blueprint $table) { + $table->dropColumn('delete_after'); + }); + + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('delete_after'); + }); + } +} From 5cfa7f877c1580eab089ae6073a9ec23f5f3ecf7 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sun, 23 Dec 2018 22:07:19 -0700 Subject: [PATCH 11/25] Update SearchController --- app/Http/Controllers/SearchController.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 5a0af8d1e..36103d528 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -22,7 +22,7 @@ class SearchController extends Controller return; } $hash = hash('sha256', $tag); - $tokens = Cache::remember('api:search:tag:'.$hash, 60, function () use ($tag) { + $tokens = Cache::remember('api:search:tag:'.$hash, 5, function () use ($tag) { $tokens = collect([]); $hashtags = Hashtag::select('id', 'name', 'slug')->where('slug', 'like', '%'.$tag.'%')->limit(20)->get(); if($hashtags->count() > 0) { @@ -39,6 +39,7 @@ class SearchController extends Controller $tokens->push($tags); } $users = Profile::select('username', 'name', 'id') + ->whereNull('status') ->where('username', 'like', '%'.$tag.'%') ->limit(20) ->get(); From 154a6444e24e9899e790561069951ab1c9ddb7d9 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 14:36:25 -0700 Subject: [PATCH 12/25] Update FederationController --- app/Http/Controllers/FederationController.php | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/FederationController.php b/app/Http/Controllers/FederationController.php index 98bd9f52b..2511b9984 100644 --- a/app/Http/Controllers/FederationController.php +++ b/app/Http/Controllers/FederationController.php @@ -48,8 +48,8 @@ class FederationController extends Controller { $this->authCheck(); $this->validate($request, [ - 'url' => 'required|string', - ]); + 'url' => 'required|string', + ]); if (config('pixelfed.remote_follow_enabled') !== true) { abort(403); @@ -123,16 +123,15 @@ class FederationController extends Controller { $this->validate($request, ['resource'=>'required|string|min:3|max:255']); - $hash = hash('sha256', $request->input('resource')); - - $webfinger = Cache::remember('api:webfinger:'.$hash, 1440, function () use ($request) { - $resource = $request->input('resource'); - $parsed = Nickname::normalizeProfileUrl($resource); - $username = $parsed['username']; - $user = Profile::whereUsername($username)->firstOrFail(); - - return (new Webfinger($user))->generate(); - }); + $resource = $request->input('resource'); + $hash = hash('sha256', $resource); + $parsed = Nickname::normalizeProfileUrl($resource); + $username = $parsed['username']; + $profile = Profile::whereUsername($username)->firstOrFail(); + if($profile->status != null) { + return ProfileController::accountCheck($profile); + } + $webfinger = (new Webfinger($profile))->generate(); return response()->json($webfinger, 200, [], JSON_PRETTY_PRINT); } @@ -156,13 +155,16 @@ XML; abort(403); } - $user = Profile::whereNull('remote_url')->whereUsername($username)->firstOrFail(); - if($user->is_private) { + $profile = Profile::whereNull('remote_url')->whereUsername($username)->firstOrFail(); + if($profile->status != null) { + return ProfileController::accountCheck($profile); + } + if($profile->is_private) { return response()->json(['error'=>'403', 'msg' => 'private profile'], 403); } - $timeline = $user->statuses()->whereVisibility('public')->orderBy('created_at', 'desc')->paginate(10); + $timeline = $profile->statuses()->whereVisibility('public')->orderBy('created_at', 'desc')->paginate(10); $fractal = new Fractal\Manager(); - $resource = new Fractal\Resource\Item($user, new ProfileOutbox()); + $resource = new Fractal\Resource\Item($profile, new ProfileOutbox()); $res = $fractal->createData($resource)->toArray(); return response(json_encode($res['data']))->header('Content-Type', 'application/activity+json'); @@ -175,6 +177,9 @@ XML; } $profile = Profile::whereNull('domain')->whereUsername($username)->firstOrFail(); + if($profile->status != null) { + return ProfileController::accountCheck($profile); + } $body = $request->getContent(); $bodyDecoded = json_decode($body, true); $signature = $request->header('signature'); @@ -205,6 +210,9 @@ XML; ->whereUsername($username) ->whereIsPrivate(false) ->firstOrFail(); + if($profile->status != null) { + return ProfileController::accountCheck($profile); + } $obj = [ '@context' => 'https://www.w3.org/ns/activitystreams', 'id' => $request->getUri(), @@ -226,6 +234,9 @@ XML; ->whereUsername($username) ->whereIsPrivate(false) ->firstOrFail(); + if($profile->status != null) { + return ProfileController::accountCheck($profile); + } $obj = [ '@context' => 'https://www.w3.org/ns/activitystreams', 'id' => $request->getUri(), From 2147c215d29b7bcfcebf1e097132d2923bef5ccf Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 21:29:16 -0700 Subject: [PATCH 13/25] Update AP Helpers --- app/Util/ActivityPub/Helpers.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 2da8c09f8..72a92ded1 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -281,11 +281,11 @@ class Helpers { public static function profileFirstOrNew($url, $runJobs = false) { $res = self::fetchProfileFromUrl($url); - $domain = parse_url($res['url'], PHP_URL_HOST); + $domain = parse_url($res['id'], PHP_URL_HOST); $username = $res['preferredUsername']; $remoteUsername = "@{$username}@{$domain}"; - $profile = Profile::whereRemoteUrl($res['url'])->first(); + $profile = Profile::whereRemoteUrl($res['id'])->first(); if(!$profile) { $profile = new Profile; $profile->domain = $domain; @@ -295,7 +295,7 @@ class Helpers { $profile->sharedInbox = isset($res['endpoints']) && isset($res['endpoints']['sharedInbox']) ? $res['endpoints']['sharedInbox'] : null; $profile->inbox_url = $res['inbox']; $profile->outbox_url = $res['outbox']; - $profile->remote_url = $res['url']; + $profile->remote_url = $res['id']; $profile->public_key = $res['publicKey']['publicKeyPem']; $profile->key_id = $res['publicKey']['id']; $profile->save(); From 919a6d6fd9f603af711f49d6af78f577955a1214 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 21:41:43 -0700 Subject: [PATCH 14/25] Update AP helpers, add missing model --- app/Util/ActivityPub/Helpers.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Util/ActivityPub/Helpers.php b/app/Util/ActivityPub/Helpers.php index 72a92ded1..b1cd2909e 100644 --- a/app/Util/ActivityPub/Helpers.php +++ b/app/Util/ActivityPub/Helpers.php @@ -7,6 +7,7 @@ use App\{ Activity, Follower, Like, + Media, Notification, Profile, Status From d11c71cdec51e96605214fd3f043e69de3bb2fe0 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 21:42:31 -0700 Subject: [PATCH 15/25] Update AP Inbox --- app/Util/ActivityPub/Inbox.php | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/app/Util/ActivityPub/Inbox.php b/app/Util/ActivityPub/Inbox.php index abf6ed5f3..0a3fcd8c5 100644 --- a/app/Util/ActivityPub/Inbox.php +++ b/app/Util/ActivityPub/Inbox.php @@ -271,7 +271,19 @@ class Inbox public function handleDeleteActivity() { + $actor = $this->payload['actor']; + $obj = $this->payload['object']; + if(is_string($obj) && Helpers::validateUrl($obj)) { + // actor object detected + } else if (is_array($obj) && isset($obj['type']) && $obj['type'] == 'Tombstone') { + // tombstone detected + $status = Status::whereUri($obj['id'])->first(); + if($status == null) { + return; + } + $status->forceDelete(); + } } public function handleLikeActivity() @@ -311,7 +323,21 @@ class Inbox $status = Helpers::statusFirstOrFetch($obj['object']); Like::whereProfileId($profile->id) ->whereStatusId($status->id) - ->delete(); + ->forceDelete(); + break; + + case 'Announce': + $parent = Helpers::statusFirstOrFetch($obj['object']); + $status = Status::whereProfileId($profile->id) + ->whereReblogOfId($parent->id) + ->first(); + Notification::whereProfileId($parent->profile->id) + ->whereActorId($profile->id) + ->whereAction('share') + ->whereItemId($status->id) + ->whereItemType('App\Status') + ->forceDelete(); + $status->forceDelete(); break; } From 94ee7a2f258e821c7efe5dbb5c41fac0fd073022 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 22:21:57 -0700 Subject: [PATCH 16/25] Update AP delivery job --- app/Jobs/StatusPipeline/StatusActivityPubDeliver.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Jobs/StatusPipeline/StatusActivityPubDeliver.php b/app/Jobs/StatusPipeline/StatusActivityPubDeliver.php index 466dbcd99..1100f0988 100644 --- a/app/Jobs/StatusPipeline/StatusActivityPubDeliver.php +++ b/app/Jobs/StatusPipeline/StatusActivityPubDeliver.php @@ -38,6 +38,10 @@ class StatusActivityPubDeliver implements ShouldQueue { $status = $this->status; + if($status->local == true || $status->url || $status->uri) { + return; + } + $audience = $status->profile->getAudienceInbox(); $profile = $status->profile; @@ -49,7 +53,5 @@ class StatusActivityPubDeliver implements ShouldQueue foreach($audience as $url) { Helpers::sendSignedObject($profile, $url, $activity); } - - // todo: fanout on write } } From 071feae1d0a35e980d4a8b60c1b715bc311f176a Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 22:23:12 -0700 Subject: [PATCH 17/25] Update Status Pipeline --- app/Jobs/StatusPipeline/NewStatusPipeline.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/Jobs/StatusPipeline/NewStatusPipeline.php b/app/Jobs/StatusPipeline/NewStatusPipeline.php index 7c1af199f..816b515fb 100644 --- a/app/Jobs/StatusPipeline/NewStatusPipeline.php +++ b/app/Jobs/StatusPipeline/NewStatusPipeline.php @@ -37,11 +37,9 @@ class NewStatusPipeline implements ShouldQueue $status = $this->status; StatusEntityLexer::dispatch($status); - StatusActivityPubDeliver::dispatch($status); - - Cache::forever('post.'.$status->id, $status); - - $redis = Redis::connection(); - $redis->lpush(config('cache.prefix').':user.'.$status->profile_id.'.posts', $status->id); + + // Cache::forever('post.'.$status->id, $status); + // $redis = Redis::connection(); + // $redis->lpush(config('cache.prefix').':user.'.$status->profile_id.'.posts', $status->id); } } From 95301f1357f1e2ac713f1a2ac8b2de774dc20321 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 22:34:48 -0700 Subject: [PATCH 18/25] Update StatusEntityLexer --- app/Jobs/StatusPipeline/StatusEntityLexer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Jobs/StatusPipeline/StatusEntityLexer.php b/app/Jobs/StatusPipeline/StatusEntityLexer.php index 7bf50adc3..e089c8992 100644 --- a/app/Jobs/StatusPipeline/StatusEntityLexer.php +++ b/app/Jobs/StatusPipeline/StatusEntityLexer.php @@ -42,7 +42,6 @@ class StatusEntityLexer implements ShouldQueue */ public function handle() { - $status = $this->status; $this->parseEntities(); } @@ -73,6 +72,7 @@ class StatusEntityLexer implements ShouldQueue $status->entities = json_encode($this->entities); $status->save(); }); + StatusActivityPubDeliver::dispatch($this->status); } public function storeHashtags() From 44cac7c1df3f539fef34f9fd95d787a9d719ca8d Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 22:41:53 -0700 Subject: [PATCH 19/25] Update SettingsController --- app/Http/Controllers/SettingsController.php | 27 +++++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 9f4f116fe..a41295007 100644 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -5,10 +5,8 @@ namespace App\Http\Controllers; use App\AccountLog; use App\Following; use App\UserFilter; -use Auth; -use DB; -use Cache; -use Purify; +use Auth, DB, Cache, Purify; +use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Controllers\Settings\{ HomeSettings, @@ -137,6 +135,18 @@ class SettingsController extends Controller return view('settings.remove.temporary'); } + public function removeAccountTemporarySubmit(Request $request) + { + $user = Auth::user(); + $profile = $user->profile; + $user->status = 'disabled'; + $profile->status = 'disabled'; + $user->save(); + $profile->save(); + Auth::logout(); + return redirect('/'); + } + public function removeAccountPermanent(Request $request) { return view('settings.remove.permanent'); @@ -148,7 +158,14 @@ class SettingsController extends Controller if($user->is_admin == true) { return abort(400, 'You cannot delete an admin account.'); } - DeleteAccountPipeline::dispatch($user); + $profile = $user->profile; + $ts = Carbon::now()->addMonth(); + $user->status = 'delete'; + $profile->status = 'delete'; + $user->delete_after = $ts; + $profile->delete_after = $ts; + $user->save(); + $profile->save(); Auth::logout(); return redirect('/'); } From cfacadc769c9192e0386fb2a3f980c2344472e67 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 22:42:15 -0700 Subject: [PATCH 20/25] Update AuthLogin listener --- app/Listeners/AuthLogin.php | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/Listeners/AuthLogin.php b/app/Listeners/AuthLogin.php index a69f86f81..ea29aa88d 100644 --- a/app/Listeners/AuthLogin.php +++ b/app/Listeners/AuthLogin.php @@ -61,5 +61,30 @@ class AuthLogin CreateAvatar::dispatch($profile); }); } + + if($user->status != null) { + $profile = $user->profile; + switch ($user->status) { + case 'disabled': + $profile->status = null; + $user->status = null; + $profile->save(); + $user->save(); + break; + + case 'delete': + $profile->status = null; + $profile->delete_after = null; + $user->status = null; + $user->delete_after = null; + $profile->save(); + $user->save(); + break; + + default: + # code... + break; + } + } } } From be1475ec312e47bf487d6987f9b2ff232eea4cce Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 23:00:50 -0700 Subject: [PATCH 21/25] Update compiled assets --- package-lock.json | 245 ++++++++++++-------- package.json | 17 +- public/css/app.css | Bin 254165 -> 267074 bytes public/js/app.js | Bin 294235 -> 300975 bytes public/js/components.js | Bin 586589 -> 580538 bytes public/mix-manifest.json | Bin 321 -> 321 bytes resources/assets/js/components.js | 17 +- resources/assets/js/components/Timeline.vue | 12 +- 8 files changed, 174 insertions(+), 117 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8545e1add..a78060635 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,11 +104,15 @@ "json-schema-traverse": "^0.3.0" } }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, "ajv-keywords": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=" }, "align-text": { "version": "0.1.4", @@ -164,7 +168,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -199,7 +202,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -632,6 +634,11 @@ "babel-types": "^6.24.1" } }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", @@ -1243,8 +1250,7 @@ "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" }, "binary-extensions": { "version": "1.11.0", @@ -1253,9 +1259,9 @@ "dev": true }, "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" }, "block-stream": { "version": "0.0.9", @@ -1328,9 +1334,9 @@ } }, "bootstrap": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz", - "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w==" + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.2.1.tgz", + "integrity": "sha512-tt/7vIv3Gm2mnd/WeDx36nfGGHleil0Wg8IeB7eMrVkY0fZ5iTaBisSh8oNANc2IBsCc6vCgCNTIM/IEN0+50Q==" }, "bootstrap-vue": { "version": "2.0.0-rc.11", @@ -1651,7 +1657,6 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1884,7 +1889,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -1892,8 +1896,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { "version": "0.3.0", @@ -2123,7 +2126,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, "requires": { "is-directory": "^0.3.1", "js-yaml": "^3.9.0", @@ -2134,14 +2136,12 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "js-yaml": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2151,7 +2151,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -2842,11 +2841,72 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emoji-mart-vue": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/emoji-mart-vue/-/emoji-mart-vue-2.6.6.tgz", + "integrity": "sha512-844CI/Sa99G6goiZN6u+zT5XxB4wUhpYYTK8s3FrU2fl9y0ckbqe0uw7EuY0R53hb4bo9uJHVOPywE+C4vu4fg==", + "requires": { + "postcss-loader": "^3.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "postcss": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.7.tgz", + "integrity": "sha512-HThWSJEPkupqew2fnuQMEI2YcTj/8gMV3n80cMdJsKxfIh5tHf7nM5JigNX6LxVMqo6zkgQNAI88hyFvBk41Pg==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.5.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { "version": "1.0.2", @@ -2872,9 +2932,9 @@ } }, "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.1.tgz", + "integrity": "sha512-q66JBFuQcy7CSlfAz9L3jH+v7DTT3i6ZEadYcVj2pOs8/0uJHLxKX3WBkGTvULJMdz0tUCyJag0aKT/dpXL9BQ==", "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", @@ -2884,20 +2944,20 @@ "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "~3.3.1", + "ws": "~6.1.0", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" } }, "engine.io-parser": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", - "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "requires": { "after": "0.8.2", "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", + "blob": "0.0.5", "has-binary2": "~1.0.2" } }, @@ -2926,7 +2986,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -3458,8 +3517,7 @@ "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fastparse": { "version": "1.1.1", @@ -4563,8 +4621,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-unicode": { "version": "2.0.1", @@ -4945,7 +5002,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, "requires": { "import-from": "^2.1.0" } @@ -4954,7 +5010,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, "requires": { "resolve-from": "^3.0.0" } @@ -5141,8 +5196,7 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-binary-path": { "version": "1.0.1", @@ -5222,8 +5276,7 @@ "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" }, "is-dotfile": { "version": "1.0.3", @@ -5477,8 +5530,7 @@ "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" }, "json-schema": { "version": "0.2.3", @@ -5507,8 +5559,7 @@ "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" }, "jsonfile": { "version": "3.0.1", @@ -5544,9 +5595,9 @@ "dev": true }, "laravel-echo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.4.0.tgz", - "integrity": "sha512-O0vkToCCpxuH9dYAlugTLQzG0BmxvGrjXim0LHZ0VPsFu/Y+sXnV9GvYbmcBq1rcJymQc/6GHMUCDY01lN26lQ==" + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.5.2.tgz", + "integrity": "sha512-Xw9QsxJKapv0C2UTnXRRIM1+epL3+qaSRGd7V8pXEuIHnxjcdpk2I7YLauDzYhBNMKEKWtlE/sv9Wgs+hYKnbg==" }, "laravel-mix": { "version": "2.1.14", @@ -5638,7 +5689,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, "requires": { "big.js": "^3.1.3", "emojis-list": "^2.0.0", @@ -6642,6 +6692,11 @@ } } }, + "opencollective-postinstall": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz", + "integrity": "sha512-saQQ9hjLwu/oS0492eyYotoh+bra1819cfAT5rjY/e4REWwuc8IgZ844Oo44SiftWcJuBiqp0SA0BFVbmLX0IQ==" + }, "opn": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", @@ -6964,9 +7019,9 @@ } }, "popper.js": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz", - "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY=" + "version": "1.14.6", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.6.tgz", + "integrity": "sha512-AGwHGQBKumlk/MDfrSOf0JHhJCImdDMcGNoqKmKkU+68GFazv3CQ6q9r7Ja1sKDZmYWTckY/uLyEznheTDycnA==" }, "portfinder": { "version": "1.0.17", @@ -7662,7 +7717,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", - "dev": true, "requires": { "cosmiconfig": "^4.0.0", "import-cwd": "^2.0.0" @@ -9591,8 +9645,7 @@ "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "1.0.1", @@ -9627,8 +9680,7 @@ "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, "resolve-url": { "version": "0.2.1", @@ -9759,7 +9811,8 @@ "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "safe-regex": { "version": "1.1.0", @@ -10208,30 +10261,30 @@ } }, "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", "requires": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", "debug": "~3.1.0", - "engine.io-client": "~3.2.0", + "engine.io-client": "~3.3.1", "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", + "socket.io-parser": "~3.3.0", "to-array": "0.1.4" } }, "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", "requires": { "component-emitter": "1.2.1", "debug": "~3.1.0", @@ -10307,8 +10360,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-resolve": { "version": "0.5.2", @@ -10441,8 +10493,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sshpk": { "version": "1.14.2", @@ -10636,7 +10687,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -10657,9 +10707,9 @@ } }, "sweetalert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.1.0.tgz", - "integrity": "sha512-9YKj0SvjKyBfRWco50UOsIbXVeifYbxzT9Qda7EsqC01eafHGCSG0IR7g942ufjzt7lnwO8ZZBwr6emXv2fQrg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/sweetalert/-/sweetalert-2.1.2.tgz", + "integrity": "sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA==", "requires": { "es6-object-assign": "^1.1.0", "promise-polyfill": "^6.0.2" @@ -10989,11 +11039,6 @@ } } }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -11127,7 +11172,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" }, @@ -11135,8 +11179,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" } } }, @@ -11263,11 +11306,19 @@ } }, "vue": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.17.tgz", - "integrity": "sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ==", + "version": "2.5.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.21.tgz", + "integrity": "sha512-Aejvyyfhn0zjVeLvXd70h4hrE4zZDx1wfZqia6ekkobLmUZ+vNFQer53B4fu0EjWBSiqApxPejzkO1Znt3joxQ==", "dev": true }, + "vue-content-loader": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vue-content-loader/-/vue-content-loader-0.2.1.tgz", + "integrity": "sha1-DrMy4qcmQ9V/sgnXLWUmVzsZH1o=", + "requires": { + "babel-helper-vue-jsx-merge-props": "^2.0.3" + } + }, "vue-functional-data-merge": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-2.0.7.tgz", @@ -11347,9 +11398,9 @@ } }, "vue-loading-overlay": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vue-loading-overlay/-/vue-loading-overlay-3.1.0.tgz", - "integrity": "sha512-EJOaqxfkSwt6LRoKYnWWPch6fLRRzHWFxLBnRHjXHIK/fP0MSmbBLh9ZRpxarXJeDBiyykQevDXa7h7809JaAA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/vue-loading-overlay/-/vue-loading-overlay-3.1.1.tgz", + "integrity": "sha512-6Iv0V/S++/LDRR3bgIZDJwBTgMVupuj+hjDb2YzTrEXbSEygtD10eJwZdMnEenLcD3ZAFz5D30qkNUYow9W2kw==" }, "vue-style-loader": { "version": "3.1.2", @@ -11362,9 +11413,9 @@ } }, "vue-template-compiler": { - "version": "2.5.17", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz", - "integrity": "sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==", + "version": "2.5.21", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.21.tgz", + "integrity": "sha512-Vmk5Cv7UcmI99B9nXJEkaK262IQNnHp5rJYo+EwYpe2epTAXqcVyExhV6pk8jTkxQK2vRc8v8KmZBAwdmUZvvw==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -11747,13 +11798,11 @@ "dev": true }, "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", + "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "~1.0.0" } }, "xmlhttprequest": { diff --git a/package.json b/package.json index 6c173a69e..e29fcd2dc 100644 --- a/package.json +++ b/package.json @@ -12,29 +12,32 @@ }, "devDependencies": { "axios": "^0.18", - "bootstrap": "^4.1.3", + "bootstrap": "^4.2.1", "cross-env": "^5.2.0", "jquery": "^3.2", "laravel-mix": "^2.1.14", "lodash": "^4.17.11", - "popper.js": "^1.14.4", - "vue": "^2.5.17" + "popper.js": "^1.14.6", + "vue": "^2.5.21", + "vue-template-compiler": "^2.5.21" }, "dependencies": { "bootstrap-vue": "^2.0.0-rc.11", + "emoji-mart-vue": "^2.6.6", "filesize": "^3.6.1", "infinite-scroll": "^3.0.4", - "laravel-echo": "^1.4.0", + "laravel-echo": "^1.5.2", "opencollective": "^1.0.3", "opencollective-postinstall": "^2.0.1", "plyr": "^3.4.7", "pusher-js": "^4.2.2", "readmore-js": "^2.2.1", - "socket.io-client": "^2.1.1", - "sweetalert": "^2.1.0", + "socket.io-client": "^2.2.0", + "sweetalert": "^2.1.2", "twitter-text": "^2.0.5", + "vue-content-loader": "^0.2.1", "vue-infinite-loading": "^2.4.3", - "vue-loading-overlay": "^3.1.0", + "vue-loading-overlay": "^3.1.1", "vue-timeago": "^5.0.0" }, "collective": { diff --git a/public/css/app.css b/public/css/app.css index c67c44c2b74d615bd5172dfb7f845659f2833208..3b4cd8d3338dc3391e35d4dcfc59799e549af98a 100644 GIT binary patch delta 13568 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 O{BEmseoc6A>3;z1Soezn delta 5270 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 L$JhSIQ!Vlf+MOZ9 delta 33557 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 Tbz+hWiciZ;6`wX|>s|j3gW1u@ delta 22296 zcmeHvd3YPu)%SB`JI=n4IB|AaaU4xNlI<)&q)Z&gOA;rs9WSvH$1!7RWKS&3$fJ>$ z*sfa&l(&=?(A(ZpC`+LQ-Y$e1s_`e$Yq zPd3zEw#gBZ**&`*J&DRSGZU4|=TE*ke5Z$1?sxog@^d%Mpj@F#tYD{W97`r|z4>&( z7Vp7NSPdv{K}_tqzhPzE^qR8K ztC%GvLDL(J$NJpqqQo`#uRbgNVM@GOkGh4)=kCwXN&NK}k4(P!;KP)7=WmM>Kl`OL zSEzKm2P#`kU#lr3l!v9&q9%-*-tO+Gp__Vlx1@}R;#$B|bt%YeHh6b{Tu*`;I(zZDrnkcK58D z`ICoEt);}+qsyr{@r6g%I2uiM&n#M*IQ8g_7;*5ityGox#$&(4`{?6M3owe=sdNeB z{z2JrHYJ{Ud>!pieE4`zLENnhB_(mUf#3b6TNMq#*O(Z4VkPZOeDMhrt>!)H%s~yi z_d>_w#4n$imDvAeE$vEN@#IcwNIdqWkD3zmpK_vk*;DIg@5Mx-B8-c5?A|AG3g$MM zoo1J`%N!TP8mnX>FDZ4!TwPKFFKtSE<*C1{ZNerSdNd~CC8C&pdeC}Rwc|>_l$sLX z{gu4LZZoI`6=|<&t>b{n4qoP1ny7wy`RwD?#C-EDKqtqZUg?;yTB(xaRfbJP3 v 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%0Au>;aAO0 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 Tt#iEpshTzU$(l7Y2Y>Ltw_CEN diff --git a/public/mix-manifest.json b/public/mix-manifest.json index d536dcc40dec1023509761317739270fcb1879d8..54baaeb4051ca1c4006d450e362a032d03ddcc4f 100644 GIT binary patch delta 78 zcmV~$u@!(I3
-
+
+ Loading... +
@@ -101,7 +103,9 @@
-
+
+ Loading... +
@@ -142,7 +146,9 @@

-
+
+ Loading... +
From f358b84f7c5c96784864d17addb68df089b6ea2b Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 23:02:29 -0700 Subject: [PATCH 22/25] Update web routes --- routes/web.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/routes/web.php b/routes/web.php index 9356e4c9a..8aebe6e90 100644 --- a/routes/web.php +++ b/routes/web.php @@ -76,6 +76,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::post('follow', 'FollowerController@store')->middleware('throttle:250,1440'); Route::post('bookmark', 'BookmarkController@store')->middleware('throttle:250,1440'); Route::get('lang/{locale}', 'SiteController@changeLocale'); + Route::get('restored', 'AccountController@accountRestored'); Route::get('verify-email', 'AccountController@verifyEmail'); Route::post('verify-email', 'AccountController@sendVerifyEmail')->middleware('throttle:10,1440'); @@ -133,12 +134,12 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact Route::get('privacy/blocked-instances', 'SettingsController@blockedInstances')->name('settings.privacy.blocked-instances'); // Todo: Release in 0.7.2 - // Route::group(['prefix' => 'remove', 'middleware' => 'dangerzone'], function() { - // Route::get('request/temporary', 'SettingsController@removeAccountTemporary')->name('settings.remove.temporary'); - // Route::post('request/temporary', 'SettingsController@removeAccountTemporarySubmit'); - // Route::get('request/permanent', 'SettingsController@removeAccountPermanent')->name('settings.remove.permanent'); - // Route::post('request/permanent', 'SettingsController@removeAccountPermanentSubmit'); - // }); + Route::group(['prefix' => 'remove', 'middleware' => 'dangerzone'], function() { + Route::get('request/temporary', 'SettingsController@removeAccountTemporary')->name('settings.remove.temporary'); + Route::post('request/temporary', 'SettingsController@removeAccountTemporarySubmit'); + Route::get('request/permanent', 'SettingsController@removeAccountPermanent')->name('settings.remove.permanent'); + Route::post('request/permanent', 'SettingsController@removeAccountPermanentSubmit'); + }); Route::group(['prefix' => 'security', 'middleware' => 'dangerzone'], function() { Route::get( From 695c7a63ba0a4e259467756776d3726c955d4029 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 23:03:20 -0700 Subject: [PATCH 23/25] Update home settings view --- resources/views/settings/home.blade.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/resources/views/settings/home.blade.php b/resources/views/settings/home.blade.php index 7a82d9a8b..aadee58d6 100644 --- a/resources/views/settings/home.blade.php +++ b/resources/views/settings/home.blade.php @@ -82,8 +82,9 @@

-
- +
From 540d0bed26b78a6c367ae009ee5ab4a6612f0a72 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 23:03:55 -0700 Subject: [PATCH 24/25] Add profile disabled view --- resources/views/profile/disabled.blade.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 resources/views/profile/disabled.blade.php diff --git a/resources/views/profile/disabled.blade.php b/resources/views/profile/disabled.blade.php new file mode 100644 index 000000000..f18c0e8d5 --- /dev/null +++ b/resources/views/profile/disabled.blade.php @@ -0,0 +1,18 @@ +@extends('layouts.app',['title' => "Account Temporarily Unavailable"]) + +@section('content') +
+
+
+
+

+ {{__('profile.status.disabled.header')}} +

+

+ {{__('profile.status.disabled.body')}} +

+
+
+
+
+@endsection \ No newline at end of file From 9ec340057f92902824ed50d1dafd6ba9c1e2e06d Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Mon, 24 Dec 2018 23:04:24 -0700 Subject: [PATCH 25/25] Update profile l10n --- resources/lang/en/profile.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/resources/lang/en/profile.php b/resources/lang/en/profile.php index 73e4e3207..7851852a2 100644 --- a/resources/lang/en/profile.php +++ b/resources/lang/en/profile.php @@ -9,4 +9,7 @@ return [ 'privateProfileWarning' => 'This Account is Private', 'alreadyFollow' => 'Already follow :username?', 'loginToSeeProfile' => 'to see their photos and videos.', + + 'status.disabled.header' => 'Profile Unavailable', + 'status.disabled.body' => 'Sorry, this profile is not available at the moment. Please try again shortly.', ];